Состояние выхода PHP 255: что это значит?


33

Недавно я скомпилировал бинарный файл PHP 5.2.9 и попытался выполнить с ним несколько скриптов PHP. Я могу выполнить некоторые сценарии без проблем, но один из них останавливает их выполнение на полпути, выходя без ошибок или предупреждений. Возвращенный код состояния процесса - 255.

Я прочитал в руководстве, что такой статус «зарезервирован». Вопрос: для чего?

Я полагаю, что это как-то связано с отсутствующими зависимостями в исполняемом файле PHP, но я не уверен.

Кто-нибудь знает, что означает код выхода 255?

PS В скриптах PHP ошибок нет, они нормально работают на других машинах.

Ответы:


34

255 - ошибка, я мог воспроизвести тот же код завершения, имея фатальную ошибку.

Это означает, что ваши отчеты об ошибках скрыты, для этого есть несколько возможных причин:

  • error_reporting не определен и php не сообщает об ошибке вообще
  • @(Ошибка подавления оператора) скрывает выход ошибки
  • STDERR перенаправляется куда-то еще (php -f somefile.php 2> / dev / null, удалить перенаправление)
  • Это может быть внутренней ошибкой из-за отсутствия зависимостей и того, что фатальная ошибка имеет тот же код завершения, что и сбой программы.

1
В некоторых редких случаях в Windows это связано с битым php.iniфайлом (т. Е. Внутри файла есть битые символы). Мне потребовалось 2 часа, чтобы понять это. Совет: Если ваш скрипт (т.е. composer.phar) работает с php -n composer.phar, то ваш php.iniфайл, вероятно, поврежден.
TFTD

9

Это может также означать , что /etc/php5/cli/php.ini(в Debian / Ubuntu) или /etc/php.ini(на RHEL / CentOS / др.) Есть display_errors = Offэто означает , что любые ошибки или предупреждения из сценариев командной строки никуда не уйдут, если log_errors = On(см также error_logпараметр).

Попробуйте запустить ваши скрипты с помощью скрипта-обертки, который использует php -d display_errors=on ...


3
Я просто хочу поблагодарить вас за -d display_errors=onподсказку - я пытался отладить собственный скрипт для чьего-то PHP-приложения, которое пытается обрабатывать все журналы исключений самостоятельно, но часто использует исключения. Используя этот флаг, я могу получить исключение для печати в CLI!
geerlingguy

В моем случае это показало, что скрипт php превысил максимальное время выполнения. Спасибо за отличный совет!
Макс Вернон,

0

Это может быть вызвано подавленными сообщениями об ошибках PHP (строка начинается с @). Я нашел строку по

grep -r "@" src/ 

а затем закомментировал @. После этого я получил реальную ошибку и смог легко ее исправить. После этого я также заметил, что PHPStorm уже обнаружил ту же ошибку, но я ее не исправил / не заметил.


0

Это также может означать, что

  • /etc/php5/cli/php.ini (в Debian / Ubuntu)

  • /etc/php.ini (на RHEL / CentOS / и т. д.)

установил

display_errors = Off 

Это означает, что любые ошибки или предупреждения из сценариев командной строки никуда не денутся, если только

log_errors = On 

Смотрите также параметр error_log.

Попробуйте запустить ваши сценарии с помощью оболочки


0

В моем случае это была смерть xDebug из-за низкой xdebug.max_nesting_levelстоимости.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.