rsync运行良好的思想终端,但不与php exec

时间:2018-10-11 18:24:05

标签: php exec rsync

我在终端上运行得很好

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('')命令中将'更改为',然后我没有收到任何输出到错误日志中

1 个答案:

答案 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);