Rsync работает нормально мыслительный терминал, но не с php exec - PullRequest
0 голосов
/ 11 октября 2018

У меня все работает нормально в терминале

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 голосов
/ 11 октября 2018

Вам нужно экранировать одинарные кавычки в строке.

\'

Таким образом, эта строка должна это исправить:

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);
...