2010年4月26日

[PHP-users 35164] Re:phpのmail関数がたまにfalseを返す

こんにちは。

On Mon, 26 Apr 2010 13:29:20 +0900
choice <info@xxxxx> wrote:

> > $ vi mailtest.php
> > (送信先、ループ回数は適当に変更ください)
> > ---

> > <?php
> > ini_set('error_reporting', E_ALL);
> > ini_set('display_errors', 1);
> > ini_set('log_errors', 1);
> >
> > echo 'PHP>>> PHP Version : ' . phpversion() . "\n";
> > echo 'PHP>>> sendmail_path : ' . ini_get('sendmail_path') . "\n";
> >
> > echo "PHP>>> start\n";
> > for ($cnt = 1; $cnt < 10; $cnt ++){
> > while (1) {
> > $ret = mail('root','subject','body');
> > echo 'PHP>>> cnt : ' . $cnt . ' ret : ' . $ret . "\n";
> > if ($ret === TRUE) {
> > break;
> > }
> > sleep(1);
> > }
> > }
> > echo "PHP>>> end\n";
> >
> > ?>
> > ---

を実行して、

> fstat64(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7c4d000
> write(4, "To: root\nSubject: subject\n\nbody\n", 32) = -1 EPIPE (Broken pipe)
> --- SIGPIPE (Broken pipe) @ 0 (0) ---
> close(4) = 0

EPIPEエラーが発生した。ということは分かりました。

以下について、何ら記述がないので教えてください。、
・mail()sleep(1)を繰り返しつつも、なんとか「PHP>>> end」まで到達した。
・永久にmail()sleep(1)を繰り返し続けた。(endに到達しない)
どちらでしょうか?
(また、後者であるならsleepを10とか20とかにすると、endに到達しませんか?)

子プロセスも追跡してみるとどうなりますか?
$ sudo sh -c "strace -f php ./mailtest.php > trace.log 2>&1"


--
goungoun <gounx2@xxxxx>
http://goungoun.dip.jp/app/

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年4月26日 17:24
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/95500
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。