PHP возвращает var-коды?


Я тестирую команду php exec:

Http://php.net/exec

И я возвращаю код результата 127.

Мой php-код:

<?

print "<br>executing 'hello':<br><b>";
exec ("hello", $output, $result);
var_dump($output);
print "<br>$result";
print "<br></b>end hello.";


print "<br><hr><br>";


print "<br>executing 'dir':<br><b>";
exec("dir", $output2, $result2);
var_dump($output2);
print "<br>$result2";
print "<br></b>end dir.";

?>

И вывод:

executing 'hello':
array(0) { } 
127
end hello.


executing 'dir':
array(2) { [0]=> string(42) "bs1.jpg hello  index.htm ml1_1.jpg pp1.jpg" } 
0
end dir.

Документация php (насколько я смог найти) гласит следующее:

Возвращение_вар

Если аргумент return_var присутствует вместе с выходным аргументом, то статус возврата выполненной команды будет записан в этот переменная.

...но у него нет списка возможностей вывода или способа их поиска.

Есть какие-нибудь предложения?

 22
Author: Jeffrey Berthiaume, 2010-02-09

4 answers

Коды возврата могут быть немного произвольными. В принципе, однако, любое ненулевое возвращаемое значение является ошибкой. Вот список некоторых распространенных, но, как правило, если вы не работаете с определенной программой, проще просто предположить, что ненулевое значение = была найдена какая-то ошибка, в отличие от попыток сопоставить ряд различных программ с конкретными кодами ошибок.

 22
Author: Owen, 2010-02-09 16:22:46

Код возврата 127 означает, что Не удалось найти указанную процедуру.

Предполагая, что вы находитесь в Windows, Коды системных ошибок Windows

 10
Author: Anthony Forloney, 2010-02-09 16:40:10

Возвращаемые значения полностью произвольны. Когда вы пишете программу, вы можете заставить ее возвращать любое значение, которое вы хотите. В PHP вы можете сделать это с помощью языковой конструкции exit:

<?php
exit(33);

Вы можете узнать точный код состояния для конкретного программного обеспечения в его документации (учитывая, что автор фактически задокументировал его). Тем не менее, существует общее согласие в том, что 0 означает "ОК", а все остальное означает "возникла проблема", поэтому проверка на ноль обычно достаточно.

В вашем случае это выглядит так, как будто вы пытаетесь выполнить несуществующую программу. PHP выполняет внешние программы через системную оболочку, поэтому значение, скорее всего, будет получено из bash или любой другой оболочки по умолчанию, которая у вас есть. В Unix есть некоторые коды выхода со специальными значениями и 127 означает, что команда не найдена.

 3
Author: Álvaro González, 2017-04-17 07:11:02

Exec() работает с внешним файлом и получает код возврата оттуда или из операционной системы. Если 127 поступает из операционной системы, это означает, что файл не был найден по указанному вами пути.

С другой стороны, если 127 поступает из приложения, которое вы запускаете, вам придется проверить документацию для этого приложения, чтобы узнать, что это значит.

 1
Author: Bruce Alderman, 2010-02-09 16:36:00