2016-12-31 108 views
0

所以我得到这个错误。搜索互联网后,它看起来像问题可能是post_upload_sizepost_size,但事实并非如此。laravel在Decoder.php中的NotReadableException - 无法从文件读取图像

我上传了可以正常工作的大图,然后这张有1.5MB的图片无法正常工作。这就像是随机的。它适用于一些,但不适用于所有图像。这是完整的输出。

哎呦,看起来像出事了:

1/1 NotReadableException在Decoder.php线46:无法从文件中读取图像(/ tmp目录/ phpVpVQeP)。

in Decoder.php line 46 
at Decoder->initFromPath('/tmp/phpVpVQeP') in AbstractDecoder.php line 293 
at AbstractDecoder->init('/tmp/phpVpVQeP') in AbstractDriver.php line 64 
at AbstractDriver->init('/tmp/phpVpVQeP') in ImageManager.php line 50 
at ImageManager->make('/tmp/phpVpVQeP') in Facade.php line 215 
at Facade::__callStatic('make', array('/tmp/phpVpVQeP')) in ProfileController.php line 251 
at Image::make('/tmp/phpVpVQeP') in ProfileController.php line 251 
at ProfileController->sendProfile(object(Request), 'klaughlin') 
at call_user_func_array(array(object(ProfileController), 'sendProfile'), array(object(Request), 'username' => 'klaughlin')) in Controller.php line 256 
at Controller->callAction('sendProfile', array(object(Request), 'username' => 'klaughlin')) in ControllerDispatcher.php line 164 
at ControllerDispatcher->call(object(ProfileController), object(Route), 'sendProfile') in ControllerDispatcher.php line 112 
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114 
at ControllerDispatcher->callWithinStack(object(ProfileController), object(Route), object(Request), 'sendProfile') in ControllerDispatcher.php line 69 
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\ProfileController', 'sendProfile') in Route.php line 203 
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134 
at Route->run(object(Request)) in Router.php line 708 
at Router->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Router.php line 710 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 675 
at Router->dispatchToRoute(object(Request)) in Router.php line 635 
at Router->dispatch(object(Request)) in Kernel.php line 236 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 50 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Cors.php line 18 
at Cors->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(Cors), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Kernel.php line 122 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87 
at Kernel->handle(object(Request)) in index.php line 54 

这里是我的var_dump

object(Symfony\Component\HttpFoundation\File\UploadedFile)#30 (7) { ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> bool(false) ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(19) "20160212_124938.jpg" ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(10) "image/jpeg" ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(1606199) ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(0) ["pathName":"SplFileInfo":private]=> string(14) "/tmp/phpVpVQeP" ["fileName":"SplFileInfo":private]=> string(9) "phpVpVQeP" } string(14) "1483214733.jpg" string(76) "/home/laughlindavid/public_html/mealog.com/public/profilepics/1483214733.jpg" 

奇怪的是,它只是如何与某些图像。

这是我的控制器中的代码。

$image = Input::file('picture'); 
var_dump($image); 
$filename = time() . '.' . $image->getClientOriginalExtension(); 
var_dump($filename); 
$path = public_path('profilepics/' . $filename); 
var_dump($path); 

Image::make($image->getRealPath())->resize(200, 200)->save($path); 

回答

1

这个错误可能有很多不同的解决方案,但我希望这会帮助那里的人。简短的回答是,我的5.6版本的PHP版本引发了gd.jpeg警告,这可能会导致它在我的干预映像Decoder.php文件中做了var_dump时不会显示为gd资源。也许使用图像Imagick驱动程序而不是GD驱动程序将解决此问题。但我使用这个来忽略警告,PHP VERSION 1.7现在自动执行。

ini_set ('gd.jpeg_ignore_warning', 1);error_reporting(E_ALL & ~E_NOTICE); 

太可怕了!我现在所有的图片都是一致上传的,但还有另一个我认为与此相关的问题。我的图像中有EXIF数据,这些数据导致它们中的一些自动旋转,这很奇怪。幸运的是,Intervention Image有一个方法用于创建我的图像时使用的“orientation()”。这是我在控制器中的新代码。

  $image = $picture; 

      echo '<br>'; 
      $filename = time() . '.' . $image->getClientOriginalExtension(); 

      $path = public_path('profilepics/' . $filename); 


     $imageMoved = $image->move(public_path('profilepics'), $filename); 

     ini_set ('gd.jpeg_ignore_warning', 1); 
     error_reporting(E_ALL & ~E_NOTICE); 

       Image::make($path)->resize(200,200)->orientate()->save($path); 

我真的很希望这可以节省您在阅读完全不同的问题时所花的时间,并抛出相同的错误。我的建议是将var从你的错误来自的文件中转换出来,并比较(至少对于我的情况)来自非工作映像的工作映像。和平与快乐编码!

+0

注意:我最后还是从temp文件夹中移动了我上传的图片,因为我读到了可能存在的问题。 – Dlaugh14

+0

我在'[gd]'后添加了'gd.jpeg_ignore_warning = 1'到php.ini, – Andrew

1

我有同样的问题。我在安装imagick驱动程序并将driver设置为imagick(config/image.php)而不是GD后解决了问题。