有啥方法可以让 PHP 检测到损坏的图像?
Posted
技术标签:
【中文标题】有啥方法可以让 PHP 检测到损坏的图像?【英文标题】:Is there any way to have PHP detect a corrupted image?有什么方法可以让 PHP 检测到损坏的图像? 【发布时间】:2011-07-04 06:55:41 【问题描述】:有什么方法可以让 php 判断一个图像文件是否损坏而无法正常显示?
我尝试过检查fopen
并检查URL是否有效,但没有成功!
【问题讨论】:
损坏或丢失? 复制:***.com/questions/3677965/… PHP 不显示图像,浏览器 可以。也许您的意思是 PHP 将无法将其发送到浏览器... 是的,我的意思是损坏了,我应该更清楚。对不起。如果它已损坏,我需要 PHP 不将其发送到浏览器。 【参考方案1】:有什么方法可以让 PHP 判断图像文件是否损坏
如果您所说的损坏是指损坏,则更改是 imagecreatefromextension 也无法读取它们:
if( imagecreatefromjpeg( $yourfile ) !== false )
// image is okay.
【讨论】:
有时这是个好主意,有时不是。如果出现错误,它可能会发出警告。使用@
可以忽略警告,但也会忽略难以调试的“致命错误:未找到函数”错误。此外,当我在 PHP 文件上使用 imagecreatefromjpeg()
时,HTTP 请求失败并在 Firefox 中显示“连接已重置”消息,我收到“PHP 警告:imagecreatefromjpeg(): gd-jpeg :JPEG 库在 Apache(不是 PHP!)的日志中报告不可恢复的错误”错误,这也很难调试。恕我直言,这是个坏主意。
@binaryLV 我显然不是指实时检查。当访问者正在观看页面时,您不应该做这样的事情,但在单独的脚本中是可以的。另外,我的 PHP 错误日志中出现了错误,所以这可能是您的配置。我不认为这是一个坏主意,只要您自己运行脚本,而不是在每个页面视图上都使用它(这会打扰访问者)。
imagecreatefromstring 做到了这一点......但不幸的是它做得太好......它检查图像是否损坏......但我正在做的是显示损坏/故障的图像......不同之处在于有些图像虽然损坏但可以显示,但其他图像无法显示...我必须能够区分...所以我需要区分损坏的图像,它是可显示和可打开的图像。 ..
@Piotr 那样的话,恐怕我要让你失望了:PHP 中没有任何函数可以模仿浏览器,打开文件并“查看”到我知道。
hmmm... 我也可以用 PHP 获得尺寸,先试试吧! :)【参考方案2】:
javascript 解决方案(涉及到 jQuery,尽管没有它也应该可以做到):
<script type='text/javascript'>
$(function()
var files = [
'warning-large.png',
'warning-large-corrupted.png',
'http://www.example.com/none.gif',
'http://sstatic.net/***/img/favicon.ico'
];
for ( var n in files )
var img = $('<img/>');
img.error(function()
alert('error:\n' + this.src);
);
img.load(function()
alert('success:\n' + this.src);
);
img.attr('src', files[n]);
);
</script>
【讨论】:
【参考方案3】:如果您的意思是像 404 一样损坏,而不是损坏的图像,您可以随时使用以下内容:
if (file_exists($imageFileName))
..
【讨论】:
请记住,file_exists()
同时检查文件和目录。我建议使用is_file()
。
好的,所以 imagecreatefromstring 似乎完成了工作......现在我有一个不同的问题 - 那是因为我正在显示的图像已经出现故障......所以我需要它关闭关于图像被扭曲...如果显示正常,那很好...所以警告现在就在路上。
没关系...找到了解决方案。非常感谢所有花时间提供帮助的人! :)【参考方案4】:
这对我有用 100% :) 我通过 file_exists() 测试图像是否存在,如果存在,您将使用它捕获损坏的图像。
<img src="your_image_source" onerror="this.src='/path/to/backup/file'">
【讨论】:
【参考方案5】:如果文件在您的服务器上,请使用 php 中的 file_exists 函数检查
http://php.net/manual/en/function.file-exists.php
【讨论】:
请记住,file_exists()
同时检查文件和目录。我建议使用is_file()
。
嗨,谢谢,但这不起作用......它仍然认为图像是有效的,即没有损坏,并尝试显示它......只有它显示它与“损坏的图像”图标...
您的图片不存在或已损坏?
如果它损坏然后尝试使用 mime_content_type php.net/manual/en/function.mime-content-type.php $tempArray = explode("/",mime_content_type(file)); if ($temp[0] == "image") showImage
@Sandeep Manne, mime_content_type()
已弃用。此外,那些通用的“获取 mime 类型”函数只检查文件的几个字节,例如“如果文件以 '1f8b' 开头,它可能是 gzip 文件”,这不足以检测损坏的文件。【参考方案6】:
查看所有最新损坏文件的好方法是使用 cpanel“错误日志”,它会显示所有最近 300 个损坏文件。
【讨论】:
以上是关于有啥方法可以让 PHP 检测到损坏的图像?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 PHP imgpng 将图像输出到浏览器时,我得到一个损坏的图像
电脑提示损坏的图像,没有被指定在Windows上运行,或者它包含错误。怎么解决?