GD(PHP)因错误的JPEG图像大小调整(Laravel干预\image)而失败,error.log中没有错误

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

我在Windows和Ubuntu开发盒上运行Apache/PHP5.6。使用Laravel 5.1和带有GD驱动程序的Intervention/Image,我试图调整一些相当大的图像(15-25MB)的大小。问题是调整大小失败,错误是
无法从文件(/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/服务器设置就有问题