GD(PHP)因错误的JPEG图像大小调整(Laravel干预\image)而失败,error.log中没有错误
我在Windows和Ubuntu开发盒上运行Apache/PHP5.6。使用Laravel 5.1和带有GD驱动程序的Intervention/Image,我试图调整一些相当大的图像(15-25MB)的大小。问题是调整大小失败,错误是GD(PHP)因错误的JPEG图像大小调整(Laravel干预\image)而失败,error.log中没有错误,php,laravel,gd,intervention,Php,Laravel,Gd,Intervention,我在Windows和Ubuntu开发盒上运行Apache/PHP5.6。使用Laravel 5.1和带有GD驱动程序的Intervention/Image,我试图调整一些相当大的图像(15-25MB)的大小。问题是调整大小失败,错误是无法从文件(/tmp/phpxxx))读取图像,但只能在大图像上。5-10MB范围内的任何内容都可以调整大小 我假设这与进程内存不足有关(因为较小的文件没有问题),但问题是我根本没有收到任何错误消息。log 为了进行测试,我将php.ini中的内存限制增加到2000
无法从文件(/tmp/phpxxx)
)读取图像,但只能在大图像上。5-10MB范围内的任何内容都可以调整大小
我假设这与进程内存不足有关(因为较小的文件没有问题),但问题是我根本没有收到任何错误消息。log
为了进行测试,我将php.ini中的内存限制增加到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()
我如何进行进一步的故障排除以找出失败的原因
注:
我降低了内存\u限制
,只是为了确保在调整大小时,低值会显示错误,确实如此,所以我认为这不是PHP内存问题
在快速离开之前,我确实看到文件显示在C:\Apache24\htdocs\tmp中
编辑:
upload_max_filesize = 2000M
post_max_size = 2000M
编辑2:
在做了一些测试后,失败的图像是那些由我手机上的全景功能创建的图像。甚至更小的文件大小的图像最终也失败了。需要告诉GD忽略来自坏JPEG的警告,因为GD显然不能容忍错误或损坏的JPEG。这些失败的图像实际上是使用内置的全景工具在我的手机上创建的。在我开始测试后,在线下载或通过photoshop(修复)打开\保存的大型图像实际上刚刚好
ini\u集(“gd.jpeg\u忽略\u警告”,1)代码>
和
问题源于以下几行干预\Image\Gd\Decoder.php
....
$info = @getimagesize($path);
...
// define core
switch ($info[2]) {
case IMAGETYPE_PNG:
$core = @imagecreatefrompng($path);
break;
case IMAGETYPE_JPEG:
$core = @imagecreatefromjpeg($path); //<--------here
dd($core);
break;
。。。。
$info=@getimagesize($path);
...
//定义核心
交换机($info[2]){
案例IMAGETYPE_PNG:
$core=@imagecreatefrompng($path);
打破
case IMAGETYPE_JPEG:
$core=@imagecreatefromjpeg($path);//最好在linux服务器上使用您的代码,我在使用windows LAMP时看到了很多错误。对于大图像和视频处理,我也使用ffmpeg来完成这部分工作。@DionisL在Ubuntu 16.04上使用PHP7出现了完全相同的错误。只需将C:\Apache24\htdocs
替换为/tmp/phpxxxx
,它会运行时间不够吗?请检查max_php中的执行时间
。ini@DionisL我很欣赏这个建议,但在转向其他方面(最终可能会成为imagemagick)之前尝试调试此错误@dangel如果您真的想调试它,请在服务器上的某个地方保存一个大映像,并尝试调整它的大小,这样就消除了所有http请求的内容,如果它工作,那么表单/请求就有问题,如果没有,那么核心php/gd/服务器设置就有问题