2017-02-15 5 views
0

私は未処理の電子メールでPHPスクリプトを実行しています。これは添付ファイルをディスクに書き込みます。電子メールが受信されるたびに、生の電子メールデータがスクリプトに転送されます。スクリプトは電子メールデータを解析し、電子メールデータから添付ファイルを抽出します。PHPスクリプトが大きなファイルをディスクに書き込まない

これは小さな添付ファイルでうまくいきました。ただし、添付ファイルのサイズが約3MB以上の場合、スクリプトはファイルをディスクに書き込まないか、約700KBのデータしか書き込まない。私はphp.iniでPHPの設定を変更しようとしましたが、それは役に立たないです。私のローカルマシンで同じスクリプトがうまく動作し、生の電子メールデータから添付ファイルを完全に抽出するということは、もっとイライラします。

生のメールを解析するためにthis libraryを使用しています。

これは、小さな添付ファイルの正常に動作され、のように私のコードが見えるものです:

... 

    $mailparser = new ZBateson\MailMimeParser\MailMimeParser(); 

    $handle = fopen($receivedfile.'.txt', 'r'); 

    $message = $mailparser->parse($handle); 

    $attachment1 = $message->getAttachmentPart(0); 
    $attachment2 = $message->getAttachmentPart(1); 

    $file1contents = stream_get_contents($attachment1->getContentResourceHandle()); 
    $file2contents = stream_get_contents($attachment2->getContentResourceHandle()); 

    file_put_contents("path/to/upload/folder/image1.jpg", $file1contents); 
    file_put_contents("path/to/upload/folder/image2.jpg", $file2contents); 

    fclose($handle); 

誰もがこの問題を解決する方法のアイデアを持っていますか?

+1

どのようなエラーが表示されますか? –

+0

自分でできない場合は、自分のウェブサイトの管理者に質問してください。 – fizzi

+0

まず、$ file1contentsと$ file2contentsのサイズを調べるので、ディスクの問題を見分けることができます(フラッシュ/同期(上書き)スクリプトの開始が早すぎる、バイナリ文字列が間違って管理されている、ファイル書き込みが最初のバイト '\ 0'で終わる可能性があります) – Jack

答えて

0

私はそれを理解しました。問題は私のサーバーの/tmpディレクトリで、合計容量はわずか1MBでした。 php.inisys_temp_dirを別のディレクトリに変更したところ、スクリプトが機能します。

関連する問題