首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中,为什么imagecreatefromjpeg“不是jpeg文件”更改为致命错误?

在PHP中,为什么imagecreatefromjpeg“不是jpeg文件”更改为致命错误?
EN

Stack Overflow用户
提问于 2017-03-19 23:55:35
回答 2查看 8.2K关注 0票数 9

我有一段较旧的代码试图加载一个图像文件。由于它不知道它是哪种类型,所以代码会全部测试它们:

代码语言:javascript
复制
$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文件工作得很好)。调查显示,第一行就会产生致命错误:

致命错误: imagecreatefromjpeg():gd: JPEG库报告不可恢复的错误:不是JPEG文件:从0x890x50开始

由于该行具有错误抑制操作符,脚本只需停止执行并返回带有空响应的HTTP 200。

我不明白的是..。啊..。怎么..。为什么..。从什么时候开始..。哈?

甚至正式文件也表示,这些函数在无法加载文件时返回FALSE,其中也显示了带有@运算符的构造。我在网上什么也找不到,说“不是JPEG文件”是一个致命的错误。无论什么地方都提到,这是一个警告,因为它一直是。为什么我现在会犯致命的错误?

我的PHP是5.6.30,GD和所有东西都在一起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-20 08:55:54

我想我可以回答我自己的问题。是已知的窃听器。看见。PHP #73514#73479。实际上,bug在libgd中,并且一直是那里也有报道。一个修复于去年11月。,但还没有发布。所以,是的..。没有运气。我将尝试使用getimagesize()来首先确定类型,然后使用适当的函数。对于一个真正被破坏的文件来说,这仍然是没有帮助的,但这是有意义的。

票数 6
EN

Stack Overflow用户

发布于 2021-05-12 11:02:41

问题是yout文件的扩展名很差,基于第一个字节,它实际上是PNG,而不是JPG。我的解决方案是检测第一个字节并将文件重命名为PNG:

代码语言:javascript
复制
$firstBytes = bin2hex(file_get_contents($tmp_name,false,null,0,2));
if ($firstBytes==8950) $_FILES['file']['name'].= '.png';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42893841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档