Статус виходу 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 

Дивіться також налаштування журналу помилок.

Спробуйте запустити сценарії за допомогою обгортки


0

У моєму випадку це була смерть xDebug через низьке xdebug.max_nesting_levelзначення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.