2017-03-19 32 views
3

我有一段较旧的代码尝试加载图像文件。因为它不知道它是什么类型,代码试图他们都:在PHP中,为什么imagecreatefromjpeg“不是jpeg文件”更改为致命错误?

$res = @imagecreatefromjpeg($sourceName); 
if ($res === false) 
    $res = @imagecreatefromgif($sourceName); 
if ($res === false) 
    $res = @imagecreatefrompng($sourceName); 
if ($res === false) { 
    $err[] = 'Cannot load file as JPEG, GIF or PNG!'; 

这用来完美了很长时间的工作,但最近的服务器迁移后,停止使用PNG文件时工作(JPEG文件工作正常)。调查显示,第一行会产生一个致命的错误:

Fatal error: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: starts with 0x89 0x50

由于线有错误抑制操作,剧本只是停止执行,并与空响应返回的HTTP 200。

我不明白的是......哇......怎么......为什么......从什么时候开始......呵呵?

即使是official documentation也表示这些函数在无法加载文件时返回FALSE,并且也显示带有@运算符的构造。我可以在网上找到任何可以说“不是JPEG文件”的东西是一个致命的错误。它提到的每一处都是一个警告,因为它一直是。为什么现在我得到一个致命的错误?

我的PHP是5.6.30,GD在那里有一切。

+0

你看看[this](http://stackoverflow.com/a/10668155/2518525)和[this](http://stackoverflow.com/a/3901885/2518525)可能值得看在(*处理越野车jpeg图像*)。 – Darren

+0

@达伦 - 这两个链接都讲述了**失败时出现的警告**。可以被抑制和忽略的警告。我得到**致命错误**。另外,我已经说过,它不是一个错误的jpeg - 这是一个PNG,我期望这个功能失败 - 只是不致命。 –

回答

3

我想我可以回答我自己的问题。这是一个已知的错误。看到。 PHP错误#73514#73479。实际上这个错误在libgd中,并且一直是reported there too。 A fix was made last November,但还没有达到发布。所以,是的...没有运气。我会尝试使用getimagesize()来代替首先确定类型,然后使用相应的函数。对于真正腐败的文件,这仍然没有帮助,但是这是一些东西。

相关问题