2017-02-15 78 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更改为另一个目录,现在脚本正常工作。