[PHP-users 7668] exitの仕様変更の影響

HAYAKAWA Hiroshi php-users@php.gr.jp
Sat, 25 May 2002 12:42:23 +0900


早川@名古屋です。

PHP4をコマンドライン版としてコンパイルして
スクリプト書き用に使っています。

/etc/aliasesに以下のように設定し、
メール受信によって起動するスクリプトを書いて利用していますが、

daemon:      |/home/hogehoge/bin/daemon.php

PHPを4.1.2から4.2.1に変更したところ、
MTA(Postfix)が以下のようなエラーを返すようになりました。


<daemon@hogehoge.com>: Command died with status 255:
    "/home/hogehoge/bin/daemon.php"


結論からいえば、「exit」の仕様が変更されたためで、
スクリプト中の exit; を return; に書き換えることで、
上記の問題は起こらなくなりました。
exit(), exit(1), exit(0)などではダメです。
(上記のエラーを返します)

http://www.php.net/manual/ja/function.exit.php
http://www.php.net/manual/ja/function.return.php

以前は、

-----
void exit(void);
この言語構造は、スクリプトの処理を終了します。
この関数は、値を返しません。
-----

だったものが、どこかの時点で

-----
void exit ([string status])
exit()関数はスクリプトの実行を終了します。
終了直前にstatusを出力します。
-----

と変更されたための影響のようです。

大抵の関数の説明では
バージョンいくつで何が変わったとか書いてあるのに、
ことexitに関してはそうした情報がなくてちょっと困りました。

http://web.archive.org/

にて過去にタイムスリップしたところ、

http://web.archive.org/web/*/http://www.php.net/manual/ja/function.exit.php

以下の2つの間で仕様変更があったようですね。

http://web.archive.org/web/20010417152057/http://php.net/manual/ja/function.
exit.php
http://web.archive.org/web/20011031181802/http://www.php.net/manual/ja/funct
ion.exit.php

cronで起動するスクリプトの場合には影響は出てないみたいです。

仕様についてどういう言えるほどの見識はもっていませんが、
exit; とある場合は、
引数を指定していないのだから出力するもなにもなくて、
以前の動作と同じになった方がいいんじゃないかという気がしますが、
どうなんでしょうか。



P.S.
いろいろ検索した際に思ったのですが、
PHPのドキュメント&ページはいつの時点(バージョン)での
ものなのかの記述がないみたいですね。
メンテ都合上の方針のようにも思えましたが、
どこかスミの方にでもバージョンが入っていれば
検索にかかりやすい&分かりやすい気がしました。


-----
With your dreaming, with your smile.
Hayakawa, Hiroshi <hayakawa@sam.hi-ho.ne.jp>
Nagoya,Aichi,JAPAN ☆彡