【发布时间】:2016-09-22 02:58:04
【问题描述】:
我在 Windows 和 Ubuntu 开发盒上运行 Apache/PHP 5.6。将 Laravel 5.1 和干预/图像与 GD 驱动程序一起使用,我正在尝试调整一些相当大的图像(15-25MB)的大小,问题是调整大小失败并出现错误Unable to read image from file (/tmp/phpxxxxxx),但仅限于大图像。 5-10MB 范围内的任何内容都可以调整大小...
我假设它与内存不足的进程有关(因为较小的文件没有问题),但问题是我实际上并没有在 error.log 中收到任何错误消息...
我已将 php.ini 中的 memory_limit 增加到 2000M 进行测试,但调整大小仍然失败。
控制器中调整图像大小的代码是...
$img = Img::make($file->getRealPath());
通过 Laravel 报错的详细信息如下...
NotReadableException in Decoder.php line 46:
Unable to read image from file (C:\Apache24\htdocs\tmp\php361F.tmp).
in Decoder.php line 46
at Decoder->initFromPath('C:\Apache24\htdocs\tmp\php361F.tmp') in AbstractDecoder.php line 293
at AbstractDecoder->init('C:\Apache24\htdocs\tmp\php361F.tmp') in AbstractDriver.php line 64
at AbstractDriver->init('C:\Apache24\htdocs\tmp\php361F.tmp') in ImageManager.php line 50
at ImageManager->make('C:\Apache24\htdocs\tmp\php361F.tmp') in Facade.php line 216
at Facade::__callStatic('make', array('C:\Apache24\htdocs\tmp\php361F.tmp')) in SubmitPhotoController.php line 97
at Image::make('C:\Apache24\htdocs\tmp\php361F.tmp') in SubmitPhotoController.php line 97
at SubmitPhotoController->store()
我将如何进行进一步的故障排除以找出失败的原因?
注意事项:
- 我减少了
memory_limit只是为了确保在调整大小时低值会显示错误并且确实如此,所以我认为这不是 PHP 内存问题。 - 我确实看到文件显示在 C:\Apache24\htdocs\tmp 中,然后很快就消失了。
编辑:
upload_max_filesize = 2000M
post_max_size = 2000M
编辑 2: 经过一些测试,失败的图像是我手机上的全景功能创建的图像。即使是更小的文件大小的图像也会失败。
【问题讨论】:
-
最好在 linux 服务器上使用你的代码,我已经看到很多使用 windows LAMP 的 strage 错误。对于大图像和视频处理,我使用 ffmpeg 来完成这部分。
-
@DionisL 在带有 PHP7 的 Ubuntu 16.04 上出现完全相同的错误。只需将
C:\Apache24\htdocs替换为/tmp/phpxxxxx -
会不会没时间了?检查 php.ini 中的
max_execution_time -
@DionisL 我很欣赏这个建议,但在转移到不同的东西之前尝试调试这个错误(最终可能最终成为 imagemagick)
-
@dangel 如果你真的想调试它,在你的服务器上保存一个大图像并尝试调整它的大小,这样你就消除了所有的 http 请求内容,如果它有效,那么你的有问题表单/请求,如果没有,那么您的核心 php/gd/server 设置有问题
标签: php laravel gd intervention