PHP Exit Status 255: Was bedeutet das?

33

Ich habe kürzlich eine PHP 5.2.9- Binärdatei kompiliert und versucht, einige PHP-Skripte damit auszuführen. Ich kann einige Skripte ohne Probleme ausführen, aber einer von ihnen hält die Ausführung in der Mitte an und beendet das Programm ohne Fehler oder Warnungen. Der zurückgegebene Statuscode des Prozesses ist 255.

Ich habe im Handbuch gelesen, dass dieser Status "reserviert" ist. Die Frage ist: wofür?

Ich glaube, es hat etwas mit fehlenden Abhängigkeiten in der ausführbaren PHP-Datei zu tun, aber ich kann nicht sicher sein.

Weiß jemand, was ein Exit-Code von 255 bedeutet?

PS Es gibt keine Fehler in den PHP-Skripten, sie laufen auf anderen Rechnern in Ordnung.

Silvio Donnini
quelle

Antworten:

34

255 ist ein Fehler, ich könnte den gleichen Exit-Code durch einen schwerwiegenden Fehler reproduzieren.

Das bedeutet, dass Ihre Fehlerberichterstattung irgendwie verborgen ist. Dafür gibt es einige mögliche Ursachen:

  • error_reporting ist nicht definiert und PHP meldet überhaupt keinen Fehler
  • Ein @(Fehlerunterdrückungsoperator) verbirgt die Ausgabe des Fehlers
  • STDERR wird woanders umgeleitet (php -f somefile.php 2> / dev / null, entferne die Umleitung)
  • Dies kann immer noch ein interner Fehler sein, da Abhängigkeiten fehlen und ein schwerwiegender Fehler denselben Exit-Code hat wie ein Programmabsturz.
Weboide
quelle
1
In einigen seltenen Fällen hängt dies mit einer beschädigten php.iniDatei zusammen (dh die Datei enthält beschädigte Zeichen). Ich habe 2 Stunden gebraucht, um das herauszufinden. Tipp: Wenn Ihr Skript (dh composer.phar) funktioniert php -n composer.phar, ist Ihre php.iniDatei wahrscheinlich defekt.
TFTD
9

Es könnte auch bedeuten, dass /etc/php5/cli/php.ini(unter Debian / Ubuntu) oder /etc/php.ini(unter RHEL / CentOS / etc.) display_errors = OffFehler oder Warnungen von Befehlszeilenskripten nirgendwo hingehen, es sei denn log_errors = On(siehe auch die error_logEinstellung).

Versuchen Sie, Ihre Skripte mit einem Wrapper-Skript auszuführen, das verwendet wird php -d display_errors=on ...

Alastair Irvine
quelle
3
Ich möchte mich nur für den -d display_errors=onTipp bedanken. Ich habe versucht, ein benutzerdefiniertes Skript für die PHP-App eines anderen Benutzers zu debuggen, das versucht, die gesamte Ausnahmenprotokollierung selbst durchzuführen, aber häufig Ausnahmen verwendet. Wenn ich dieses Flag benutze, kann ich die Ausnahme erhalten, um an die CLI zu drucken!
Geerlingguy
In meinem Fall hat mir das gezeigt, dass das PHP-Skript seine maximale Ausführungszeit überschritten hat. Danke für den tollen Tipp!
Max Vernon
0

Dies kann durch unterdrückte PHP-Fehlermeldungen verursacht werden (die Zeile beginnt mit @). Ich habe die Leitung durch gefunden

grep -r "@" src/ 

und dann das @ auskommentiert. Danach bekam ich den eigentlichen Fehler und konnte ihn problemlos beheben. Ich bemerkte auch später, dass PHPStorm den gleichen Fehler bereits herausgefunden hatte, aber ich hatte ihn nicht behoben / bemerkt.

Antti Hätinen
quelle
0

Es könnte auch bedeuten, dass

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

  • /etc/php.ini (unter RHEL / CentOS / etc.)

wurde festgelegt

display_errors = Off 

Dies bedeutet, dass alle Fehler oder Warnungen von Befehlszeilenskripten nirgendwo hingehen, es sei denn

log_errors = On 

Siehe auch die Einstellung error_log.

Versuchen Sie, Ihre Skripte mit einem Wrapper auszuführen

Alauddin
quelle
0

In meinem Fall war das der Tod von xDebug wegen des geringen xdebug.max_nesting_levelWertes.

zored
quelle