人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Postfixで受信したメールをパイプでPHPに渡し、Fromアドレス、件名、本文をDBに格納、添付ファイルを指定フォルダに保存するプログラムを作っているのですが、画像保存だけがうまくいかず困っています。

以下画像保存部分のソースです。
ここにくるまで、受信メールの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の問題ような感じもするのですが、どのような問題があると考えられるでしょうか?
よろしくおねがいいたします。

●質問者: dadadadan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:777 Apache DB Flock FP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● t_shiono
●35ポイント

ログは何か出ていますか?

どの部分で失敗しているのか分からないので、この情報だけだと、想像の域を出ないのですが、SELinuxが有効になっていると、このような現象が起こる可能性があるかと思います。

画像の保存場所を、/tmp以下や、/home以下など変えてみて、ディレクトリによって成功、失敗が変わるようであれば、この原因が高いかと思います。

いかがでしょうか?

http://www.selinux.gr.jp/

◎質問者からの返答

回答ありがとうございます。

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

となっていて、メールの受け渡しはうまくやっているようです。


2 ● toohigh
●35ポイント

php のログ出力を確認してみる、が必要かと思います。ログファイルの場所は php.ini で指定されているかと。

ソースを見る限り $tmp として出力データ全体が一旦メモリ上に置かれる仕組みかと思いますので、php 側でメモリ利用量の制限などがかかっているのが原因かな、という気がします。時々やってしまいがちな点ですので・・。その場合は添付ファイルを十分小さいものにすればうまくいったりするのかもしれません。あくまでも切り分けの手段として、ですが。

あと、同じメールについて試してみた結果、パイプ起動だと失敗&POP3経由だと成功、になっているのでしょうか。

http://sb.xrea.com/archive/index.php/t-8285.html

◎質問者からの返答

ご回答ありがとうございました。

返信が遅くなりもうしわけございません。

添付しているファイルは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成功です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ