1

Я на CentOS 6 64bit с PHP 5.4.12.

Это очень странное поведение PHP.

Смотрите следующий скрипт:

echo 'Trying Query: whereis jbig2dec<br>';
exec('whereis jbig2dec',$output) or die('Failed');

$location=explode(' ',implode($output));
$location=$location[1];

echo 'Result: '.implode($output)."<p>";

echo 'Trying Query: '.$location.' --help<br>';
exec($location.' --help',$output) or die('Failed');

echo 'Result: '.implode($output)."<p>";

echo 'Trying Query: jbig2dec --help<br>';
exec('jbig2dec --help',$output) or die('Failed');

echo 'Result: '.implode($output)."<p>";

Результат:

Trying Query: whereis jbig2dec
Result: jbig2dec: /usr/local/bin/jbig2dec
Trying Query: /usr/local/bin/jbig2dec --help
Failed

Вы можете видеть выше, что PHP-функция exec работает для whereis jbig2dec но не работает для /usr/local/bin/jbig2dec --help . НО, если я /usr/local/bin/jbig2dec --help или jbig2dec --help в SSH, я получаю правильный ответ от jbig2dec.

Как это могло произойти?

1 ответ1

4

Проверьте возвращаемое значение /usr/local/bin/jbig2dec --help по SSH следующим образом:

$ /usr/local/bin/jbig2dec --help
[... generates some output ...]
$ echo $?

Последняя команда печатает "возвращаемое значение" предыдущего вызова. Возвращаемое значение 0 - это "способ оболочки", говорящий "команда выполнена успешно". Возвращаемое значение чего-то еще указывает на ошибку.

Если exec() встречает возвращаемое значение, которое не равно 0 (которое некоторые программы выдают в сообщениях помощи, поскольку программа не выполнялась технически), оно возвращает "false" в контексте PHP и, таким образом, запускает часть or die() и прекратить PHP-скрипт с данным сообщением об ошибке.

Короче говоря: ваша команда, вероятно, не возвращает успешный статус, и вы сказали PHP die() если это не так.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .