Выполнение команд Linux с помощью PHP

Я пытаюсь выполнить команду linux с помощью скрипта командной строки PHP, что без проблем с помощью команды exec.

Проблема в том, что команда, которую я выполняю (mysqldump) выводит сообщение об ошибке, если что-то не так (например, пользователь / пароль неверен). Кажется, я не могу зафиксировать эту ошибку, чтобы ее зарегистрировать. Он просто печатает эту ошибку на экране.

Как заставить эту ошибку не печатать на экране, а вместо этого поставить ее в переменную для использования в моем скрипте?

Благодаря!

Используйте popen для запуска процесса. Пример №2 на этой странице показывает, что именно вы ищете:

<?php error_reporting(E_ALL); /* Add redirection so we can get stderr. */ $handle = popen('/path/to/spooge 2>&1', 'r'); echo "'$handle'; " . gettype($handle) . "\n"; $read = fread($handle, 2096); echo $read; pclose($handle); ?> 
 exec("mysqldump -u user -p passwod database > outputfile.sql 2> error.log"); 

Вам нужно перенаправить stderr в stdout , чтобы вы могли его захватить. В этом примере трафик stdout на devnull (таким образом игнорируется) и маршрутизирует stderr к вам:

 exec('ls * 2>&1 1>/dev/null'); 

Я не слишком горячий в Unix (New Years Resolution …), но эти функции выглядят полезными:

  • shell_exec – возвращает результат как строку.
  • passthru – Похоже, вы можете выполнить это как: passthru('command', $result); а затем использовать $result .

пытался использовать обратные сигналы?


 $ var = `command`;

Следующее будет направлять сообщения stderr в том же месте, что и обычный выход.

 exec("mysql_dump blah 2>&1",$output,$return_val) if($return_val !== 0) echo "there was an error" 

2> & 1 означает перенаправление сообщений stderr на то же место, что и stdout, и, таким образом, будет загружаться в выходной массив.

Вы посмотрели на команду system () ? Прошло некоторое время с тех пор, как я сделал любой PHP, но это звонит.