Выполнение команд Linux с PHP - PullRequest
4 голосов
/ 02 февраля 2009

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

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

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

Спасибо!

Ответы [ 7 ]

4 голосов
/ 02 февраля 2009

Используйте 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);
?>
2 голосов
/ 02 февраля 2009

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

exec('ls * 2>&1 1>/dev/null');
2 голосов
/ 02 февраля 2009
exec("mysqldump -u user -p passwod database >  outputfile.sql 2> error.log");
1 голос
/ 02 февраля 2009

Мне не слишком жарко в Unix (новогодняя резолюция ...), но эти функции выглядят полезными:

  • shell_exec - возвращает результат в виде строки.
  • passthru - похоже, вы можете выполнить это следующим образом: passthru('command', $result); и затем использовать $result.
0 голосов
/ 02 февраля 2009

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

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

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

0 голосов
/ 02 февраля 2009

пробовал использовать backticks?


$var = `command`;

0 голосов
/ 02 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...