以下画像保存部分のソースです。
ここにくるまで、受信メールのFromアドレス、件名、本文、添付ファイルのファイル名の取得やデコードも問題なくでき、DBに格納することができています。
しかし、fwriteのところだけがうまく動作しません。
$fp = @fopen($tmpdir.$filename, "w+");
flock($fp,2);
fwrite($fp, $tmp);
flock($fp,3);
fclose($fp);
OSはFedoraCore6、PHP5、画像を保存するフォルダは777にしています。
Postfixのdefault_privsをnobodyやapacheにしたりもしましたが、だめでした。
添付ファイルのファイル名の取得などが問題がなくできているのに、画像の保存だけできないというのがどうも理解できません。PHPではなくOSの問題ような感じもするのですが、どのような問題があると考えられるでしょうか?
よろしくおねがいいたします。
ログは何か出ていますか?
どの部分で失敗しているのか分からないので、この情報だけだと、想像の域を出ないのですが、SELinuxが有効になっていると、このような現象が起こる可能性があるかと思います。
画像の保存場所を、/tmp以下や、/home以下など変えてみて、ディレクトリによって成功、失敗が変わるようであれば、この原因が高いかと思います。
いかがでしょうか?
php のログ出力を確認してみる、が必要かと思います。ログファイルの場所は php.ini で指定されているかと。
ソースを見る限り $tmp として出力データ全体が一旦メモリ上に置かれる仕組みかと思いますので、php 側でメモリ利用量の制限などがかかっているのが原因かな、という気がします。時々やってしまいがちな点ですので・・。その場合は添付ファイルを十分小さいものにすればうまくいったりするのかもしれません。あくまでも切り分けの手段として、ですが。
あと、同じメールについて試してみた結果、パイプ起動だと失敗&POP3経由だと成功、になっているのでしょうか。
ご回答ありがとうございました。
返信が遅くなりもうしわけございません。
添付しているファイルは10K程度なので、メモリの制限などはないと思います。
PHPのログを見てみたところこのようなエラーが出ていました。
[03-Jul-2007 11:31:50] PHP Warning: flock() expects parameter 1 to be resource, boolean given in /var/www/***/mail_syori.php on line 296
[03-Jul-2007 11:31:50] PHP Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/***/mail_syori.php on line 297
検索してみたりもしましたが、ちょっと意味が分かりません。
どのようなことが言えるのでしょうか?
それから、同じメールでパイプ失敗&POP成功です。
回答ありがとうございます。
SELINUXはdisabledにしてあります。
違うプログラムですが、POPで接続してメールを受信してくるものは動作しています。
Postfixからパイプで動作させると保存だけがうまくいきません。
ちなみにログとはどのログを見ればいいのでしょうか?
apacheのログには何もでてきません。
Postfixのログは
Jun 28 10:45:54 localhost postfix/local[10369]: 258041BF8038: to=<to@123.com>, orig_to=<alias@123.com>, relay=local, delay=0.43, delays=0.04/0/0/0.39, dsn=2.0.0, status=sent (delivered to command: /usr/bin/php /var/www/***/mail_syori.php)
Jun 28 10:45:54 localhost postfix/qmgr[1033]: 258041BF8038: removed
となっていて、メールの受け渡しはうまくやっているようです。