早川@名古屋です。 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 ☆彡