2017-02-15 79 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的大小,所以你可以區分磁盤問題(刷新/同步(不太可能),覆蓋(可能是腳本啓動了兩次))從stream_get_contents()問題(庫問題,腳本結束得太早,二進制字符串被錯誤地管理 - 也許文件寫在第一個字節結束'\ 0') – Jack

回答

0

我想通了。問題出在我服務器的/tmp目錄中,總共只有1mb的空間。我將的php.ini更改爲另一個目錄,現在腳本正常工作。