Status wyjścia PHP 255: co to znaczy?


33

Niedawno skompilowałem plik binarny PHP 5.2.9 i próbowałem z nim wykonać kilka skryptów PHP. Mogę wykonywać niektóre skrypty bez problemów, ale jeden z nich przerywa wykonywanie w połowie, kończąc bez błędów i ostrzeżeń. Zwrócony kod statusu procesu to 255.

Przeczytałem w instrukcji, że taki status jest „zastrzeżony”. Pytanie brzmi: po co?

Myślę, że ma to coś wspólnego z brakującymi zależnościami w pliku wykonywalnym PHP, ale nie jestem pewien.

Czy ktoś wie, co oznacza kod wyjścia 255?

PS Skrypty PHP nie zawierają błędów, działają poprawnie na innych komputerach.

Odpowiedzi:


34

255 to błąd, mógłbym odtworzyć ten sam kod wyjścia, mając błąd krytyczny.

Oznacza to, że w jakiś sposób ukryte jest zgłaszanie błędów, istnieje kilka możliwych przyczyn:

  • raportowanie błędów nie jest zdefiniowane i php nie zgłasza żadnego błędu
  • @(Błąd tłumienia operatora) ukrywa wyjście błędu
  • STDERR jest przekierowywany gdzie indziej (php -f somefile.php 2> / dev / null, usuń przekierowanie)
  • Może to być nadal błąd wewnętrzny z powodu braku zależności i że błąd krytyczny ma taki sam kod wyjścia jak awaria programu.

1
W niektórych rzadkich przypadkach w systemie Windows jest to związane z uszkodzonym php.iniplikiem (tzn. Plik zawiera uszkodzone znaki). Zajęło mi to 2 godziny, żeby to rozgryźć. Wskazówka: Jeśli Twój skrypt (tj. composer.phar) Działa php -n composer.phar, php.iniprawdopodobnie plik jest uszkodzony.
tftd,

9

Może to również oznaczać, że /etc/php5/cli/php.ini(w Debianie / Ubuntu) lub /etc/php.ini(w RHEL / CentOS / itp.) Ma display_errors = Offto, co oznacza, że ​​wszelkie błędy lub ostrzeżenia ze skryptów wiersza poleceń nigdzie nie pójdą, chyba że log_errors = On(patrz także error_logustawienie).

Spróbuj uruchomić swoje skrypty za pomocą skryptu opakowującego, który używa php -d display_errors=on ...


3
Chcę tylko podziękować za -d display_errors=onwskazówkę - próbowałem debugować niestandardowy skrypt dla czyjejś aplikacji PHP, która próbuje samodzielnie obsługiwać wszystkie wyjątki, ale często je wyjątki. Za pomocą tej flagi mogę uzyskać wyjątek, aby wydrukować do CLI!
geerlingguy

W moim przypadku pokazało mi to, że skrypt php przekroczył maksymalny czas wykonania. Dziękuję za świetną wskazówkę!
Max Vernon,

0

Przyczyną mogą być ukryte komunikaty o błędach PHP (linia zaczyna się od @). Znalazłem linię przez

grep -r "@" src/ 

a następnie skomentował @. Po tym otrzymałem rzeczywisty błąd i mogłem go łatwo naprawić. Zauważyłem też później, że PHPStorm już odkrył ten sam błąd, ale go nie naprawiłem / nie zauważyłem.


0

Może to także znaczyć

  • /etc/php5/cli/php.ini (w Debianie / Ubuntu)

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

ustawił

display_errors = Off 

co oznacza, że ​​wszelkie błędy lub ostrzeżenia ze skryptów wiersza poleceń nigdzie nie pójdą, chyba że

log_errors = On 

Zobacz także ustawienie dziennika błędów.

Spróbuj uruchomić skrypty za pomocą opakowania


0

W moim przypadku była to śmierć xDebug z powodu niskiej xdebug.max_nesting_levelwartości.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.