【问题标题】:PHP script does not write large files to diskPHP脚本不会将大文件写入磁盘
【发布时间】:2017-02-15 09:47:54
【问题描述】:

我正在对原始电子邮件运行 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);

有人知道如何解决这个问题吗?

【问题讨论】:

  • 你遇到什么样的错误?
  • 如果您不能自己做,请让您的网站管理员增加大小
  • 我要检查的第一件事是 $file1contents 和 $file2contents 的大小,因此您可以区分磁盘问题(刷新/同步(不太可能)、覆盖(可以,可能脚本启动两次)) stream_get_contents() 问题(库问题,脚本过早结束,二进制字符串管理错误 - 文件写入可能在第一个字节 '\0' 结束)
  • @Jack 一般在单个附件大小为3mb+时发生
  • 是的.. 我的意思是.. 在运行时检查它

标签: php email


【解决方案1】:

我想通了。问题出在我服务器的/tmp 目录上,它的总空间只有1mb。我将php.ini 中的sys_temp_dir 更改为另一个目录,现在脚本可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多