我在终端上运行得很好
rsync --info=progress2,stats source destion | stdbuf -oL awk 'BEGIN { RS="\r" } /%/ { print $2 }' > /temp/progress.txt
但是当我尝试将其移至PHP exec时,我遇到了错误
echo exec('rsync --info=progress2,stats source destion | stdbuf -oL awk 'BEGIN { RS="\r" } /%/ { print $2 }' > /temp/progress.txt');
我收到此错误
mod_fcgid: stderr: PHP Parse error: syntax error, unexpected 'BEGIN' (T_STRING), expecting ',' or ')' in /home/laweb/public_html/phptest/copy.php on line 32
我尝试在exec('')命令中将'更改为',然后我没有收到任何输出到错误日志中
答案 0 :(得分:0)
您需要对字符串中的单引号进行转义。
\'
所以这一行应该解决它:
echo exec('rsync --info=progress2,stats source destion | stdbuf -oL awk \'BEGIN { RS="\r" } /%/ { print $2 }\' > /temp/progress.txt');
您是说没有输出,并且文件没有复制,请尝试shell_exec()
$output = shell_exec('rsync --info=progress2,stats source destion | stdbuf -oL awk \'BEGIN { RS="\r" } /%/ { print $2 }\' > /temp/progress.txt');
echo $output;
现在我记得使用escapeshellarg()
$command = escapeshellarg('rsync --info=progress2,stats source destion | stdbuf -oL awk \'BEGIN { RS="\r" } /%/ { print $2 }\' > /temp/progress.txt');
echo exec($command);