[PHP-users 29381] Re: セグメンテーションエラーについて

Reiji Matsumoto matsumoto @ spline.oc.to
2006年 6月 12日 (月) 18:30:37 JST


松本と申します。

> >ループで回しPEAR::Mailで配信しております。メモリ使いすぎが原因という事で
あれ

Mail::factory()メソッドでインスタンスを生成する時、第一パラメーター
にはsmtpが指定されていますでしょうか。
その場合、send()メソッドを利用するたびに解放されないメモリが
少しずつ蓄積されて、いずれ動かなくなってしまいます。

該当する場合はlib/php/Mail/smtp.php の182行目付近に

$smtp->disconnect();
return true;

と、あると思いますので、

$smtp->disconnect();
unset($smtp);
return true;

と、してみて下さい。本当はエラーで返った時にもインスタンスを削除すべき
ですが、取りあえず正常終了時のみの設定で動くと思います。
気になる場合はsend()関数内で'return'で検索し、それぞれのreturnの直前で
unset($smtp)とするとよいかも知れません。

逆にpearのソースに手を加えるのに抵抗があったり運用上不可能な場合は、
1通送るたびにMail::factory()で作成したインスタンスをunsetすると良
いと思います。

smtp以外の方法でインスタンスを生成している場合は知りませんが、ひょっと
したら同じような問題があるかも知れませんね。




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