话在之前:最近写了一个脚本,遍历文件夹获取图片,并新建文件夹后打包,再删除新建文件夹。本地测试完全没有问题,
但是~~~提到服务器上后脚本一直执行不了,打出执行结果 退出错误状态码 2 , 各种改 一直不成功 最后灵光一闪
biu ~
解决办法: 在服务器新建空脚本文件 粘贴代码进去 保存 运行 成功 perfect ~
因为不同系统生成的文件格式 有可能不能被识别
脚本包含: 1.脚本接收参数(getopts)
2.linux命令获取当前时间(`date +%Y%m%d%H%M%S`)
3.获取文件最后修改时间时间戳(`stat -c %Y $dir_or_file`)
4.判断是否是文件夹( [ -d $dir_or_file ] )
5.判断文件夹是否为空( [ "`ls -A $dir_or_file`" = "" ] )
6.时间做比较( [ $filetime -gt $starttime ] )
endtime=`date +%Y%m%d%H%M%S`
while getopts ":t:s:e:b:k:" opt
do
case $opt in
s)
starttime=$OPTARG
;;
e)
endtime=$OPTARG
;;
b)
savedir=$OPTARG
;;
k)
scandir=$OPTARG
;;
t)
tiptime=$OPTARG
;;
esac
done
cd $savedir
mkdir $savedir$endtime
function getdir(){
for element in `ls $1`
do
dir_or_file=$1"/"$element
if [ -d $dir_or_file ]
then
mkdir $savedir$endtime"/"$element
getdir $dir_or_file
else
destdir=${1##*/}
suffix=${element##*-}
suffixret=${suffix%%.*}
filetime=`stat -c %Y $dir_or_file`
if [[ $suffixret != 'lp' ]]
then
if [ $filetime -gt $starttime ]
then
cp $dir_or_file $savedir$endtime"/"$destdir
fi
fi
fi
done
}
checkempty(){
for element in `ls $1`
do
dir_or_file=$1"/"$element
if [ -d $dir_or_file ]
then
if [ "`ls -A $dir_or_file`" = "" ]
then
rm -rf $dir_or_file
fi
else
rm -rf $dir_or_file
fi
done
}
getdir $scandir
checkempty $scandir
filename="$endtime.zip"
zip -r ${filename} ${endtime}
rm -rf $endtime
`date +%Y%m%d%H%M%S` : 获取当前时间 20190117173310
`stat -c %Y $dir_or_file` : 获取文件修改时间戳 3545792459
-gt : 比较大小判断符号 >
执行脚本的PHP代码
$DEDEROOT = '/data/www/default';
$filedir=$DEDEROOT."/";
$savedir=$DEDEROOT."/uploads/";
$scandir=$DEDEROOT."/uploads/userup/";
$shell = $DEDEROOT."/script/test.sh -t $tipTime -s $startTime -e $endtTime -b $savedir -k $scandir";
exec($shell, $result, $status);
if( $status ){
echo "命令失败,错误状态码".$status;exit;
}else{
//判断如果文件存在,则跳转到下载路径
$down_host = $_SERVER['HTTP_HOST'].'/'; //当前域名
if(file_exists($savedir.$endtTime.'.zip')){
$dsql->ExecuteNonequery($query);
echo "<script>alert('操作成功');window.history.go(-1)</script>";
}else{
echo "<script>alert('".$down_host."uploads/".$endtTime.".zip 404 Not Found');window.location='" . $down_host.'Manage/'. "';</script>";
}
}