У меня это работает нормально в терминале
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 (»), тогда я не получаю вывод в журнал ошибок
Вы должны экранировать одинарные кавычки в строке.
\'
Так что эта строка должна это исправить:
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);
Других решений пока нет …