PHP終了ステータス255:それはどういう意味ですか?


33

最近、PHP 5.2.9バイナリをコンパイルし、それを使用していくつかのPHPスクリプトを実行しようとしました。一部のスクリプトは問題なく実行できますが、そのうちの1つは実行を途中で停止し、エラーや警告なしで終了します。返されるプロセスのステータスコードは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のは/ etcに。)がある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 / etc上)

設定しました

display_errors = Off 

つまり、コマンドラインスクリプトからのエラーや警告は、次の場合を除いてどこにも行きません。

log_errors = On 

error_log設定も参照してください。

ラッパーでスクリプトを実行してみてください


0

私の場合は、xdebug.max_nesting_level価値が低いためにxDebugが死亡しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.