【问题标题】:PHP File uploading stopsPHP 文件上传停止
【发布时间】:2012-06-16 13:32:05
【问题描述】:

对于一个客户,我构建了一个简单的脚本来上传多个文件(图像),调整它们的大小,将它们存储在一个临时文件夹中,然后再将它们移动到它们的目的地。

调整大小是使用 PHP 的 GD 完成的,因为 Imagick 不可用。

这些图片每张大约 2/4 MB,客户一次上传大约 30 张图片。 我使用了 HTML5 的 multiple="" 属性,一切正常。

在测试中一切正常,因为我使用的是 Windows 标准壁纸图片。

我找不到问题的根源。 当上传超过 1 张图片时,脚本调试失败告诉我它确实上传了第二张图片但不会调整大小。

我检查了图像的内存使用情况,每个图像大约 105724352 字节

我的 PHP ini 设置:

max_execution_time = 300     
max_input_time = 600    
memory_limit = 200M      

所以你在第二张图片中看到内存达到了它的限制,使我的脚本停止。对吗?

如果是,升级内存限制有多大的明智?

提前致谢!

编辑:

现在看来 GD 函数 imagecreatefromjpeg 无法处理分辨率大于 3500px 宽的文件,我的文件大于 5000px 宽。

有人有这方面的工作吗? 在这一点上,我想知道如果客户端需要这么多内存来存储这些图像,让客户端在共享主机上是否明智。

【问题讨论】:

  • 尝试为测试用例设置ini_set('memory_limit','-1');。并说出错误是否仍然存在。
  • 似乎工作,所有文件正在处理中。谢谢!但我认为我不应该批量处理文件
  • 即使您只处理一个文件大小为 4MB 的图像,您也可能需要更高的 memory_limit 或无限制 (-1)。
  • 你有例子吗?还是最佳实践?从来没有处理过这么大的图像,我有点不知道如何处理它。
  • 您可以查看此线程stackoverflow.com/questions/5253732/…。我的公司使用图像类,就像我在第一条评论中所做的那样。 ini_set('memory_limit','-1'); /*do stuff with big images*/ ini_restore('memory_limit');.

标签: php image memory upload


【解决方案1】:

所以你在第二张图片中看到内存达到了极限,这让我 脚本停止。对吗?

检查(**nix 系统)/var/log/apache2/error.log 下的 Apache 错误日志,看看是否真的是问题所在。

如果是,升级内存限制有多大的明智?

您不应在一个脚本中处理多个图像操作。为每一个进行ajax查询,在单独的实例中处理它们。

【讨论】:

  • 感谢您的回复,检查了错误日志,没有错误
  • @VincentCohen 请确保您启用了错误报告并检查访问日志。根据我的经验,如果出现内存问题,它应该总是删除一些日志记录。如果您没有看到任何记录,那么您的问题可能根本不是内存问题。
  • 把我的头发拉到这里来。是的,错误日志记录是作为测试的手段。任何日志中都没有消息。我知道我应该单独处理每个文件而不是批量处理,但我也想理解这一点。
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多