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

goungoun gounx2 @ gmail.com
2010年 4月 26日 (月) 17:24:04 JST


こんにちは。

On Mon, 26 Apr 2010 13:29:20 +0900
choice <info @ choice-site.com> 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 @ gmail.com>
http://goungoun.dip.jp/app/



PHP-users メーリングリストの案内