[php]exit;ではなくexit(1);を使う理由

徒然草2.0

phpの処理を終了するにはexit;を使うといいのですが、念の為exit(1);にしたほうがいいというアドバイスをいただいたことがあります。

exit;でも普通に終了するのですが、C言語などで関数が終了したのをreturn 0;やreturn 1;などで制御することがあり、0は正常終了、1は異常終了を意味するためかと思います。

phpのWebアプリはphpを実行している実行主体があって、apacheならapacheのモジュール(だっけ)、ningxならばphp-fpmで動かしている。phpのWebアプリケーションがexit;で止まらなかったことが最近はまずないのですが、perl-cgiでWebアプリケーションの開発をやっていた時などに、httpdのプロセスが固まってしまったことがあります。まあ…昔、そんなことがあったなというぐらいですが。その時に、exit(1);としないとプロセスが残ってしまうことがありました。

プロセスが固まってしまうのは、結構致命的な問題なので…exit;ではなく、念の為にexit(1);を使用していたほうがいいのかもしれません。

※このように何らかのプログラム(多くは何らかのWebサーバとそれに関連したモジュール)によってPHPスクリプトが動かされているわけですが、そのプログラムに返却値として1や0を返さないとうまく動作しない可能性があるので、その可能性をしっかり考慮しておいたほうが丁寧ということです。

exit(0); // 正常終了

exit(1); // 異常終了

という意味づけも一緒にもたせることができますので、exit;よりも見た目にも分かりやすいコードと言えるのではないでしょうか。

※(…ただ1の意味を知らないと意味付けになりませんが)それに処理系によって1と0は分かれる(逆の意味を持つ)かもしれませんし、そもそも正常終了なのになぜ途中終了するのか?という気もしますが汗。そこのところには、深くは触れないでおきます。

コメント

タイトルとURLをコピーしました