【问题标题】:imagecreatefrompng error - how to detect and handle?imagecreatefrompng 错误 - 如何检测和处理?
【发布时间】:2011-06-10 23:26:23
【问题描述】:

在我的脚本中,我有以下几行:

$test = @imagecreatefrompng($name);
if ($test) { ... }

我确定$name 代表磁盘上的现有文件,但我必须处理该文件不是有效PNG 文件的情况(由于传输错误或恶意用户)。我希望不做任何事情来处理这种情况。

但是,鉴于上述代码,我的 PHP 解释器在第一行停止并显示以下错误消息:

imagecreatefrompng() [function.imagecreatefrompng]: 'foobar.png' 不是有效的 PNG 文件

'@'是否应该抑制此错误消息并让函数返回false,如文档中所述?如何告诉 PHP 我知道可能会发生错误并且不会中断执行?

【问题讨论】:

  • fi2.php.net/manual/en/language.operators.errorcontrol.php#98895 有帮助吗?您使用的是自定义错误处理程序还是什么?如果由于某种原因它绝对不起作用,您总是可以使用输出缓冲来捕获错误消息,但这有点难看。
  • 你试过了吗:try catch 问题?
  • @Shaddika:您可能想将此作为答案发布,以便我接受。 @Haim Evgi:这也不例外。
  • 我不确定 try/catch 是否会起作用,因为没有抛出异常。

标签: php error-handling gd imagecreatefrompng


【解决方案1】:

您可以在文件上使用mime_content_type

$image = 'file.png';
if(is_file($image) && mime_content_type($image_type) == 'image/png'){
    // Image is PNG
}else{
    // Not PNG
}

这将确保图像是文件和 PNG。

【讨论】:

  • 好东西,这能满足你的一切需求吗?
  • 好吧,Shaddika 正确识别了实际问题 - 我的自定义错误处理程序中有一个错误,它破坏了 @ 构造。我已经 +1 了你的答案,并且会接受它,除非 Shaddika 在接下来的几分钟内将他的评论作为实际答案发布。
  • 这如何回答有关如何使用 gd lib 检测错误的问题..
【解决方案2】:

'@' 旨在抑制错误,您可能会收到警告消息。

您可以使用异常来做到这一点,例如

try {
    $test = imagecreatefrompng($name);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

查看更多here

【讨论】:

  • 您提供的链接有一个说明,解释了为什么您的答案不适用于此处 - “内部 PHP 函数主要使用错误报告,只有现代面向对象的扩展使用异常。”
  • 是的,但同样的说明解释了如何使其适用于“错误报告”。
猜你喜欢
  • 2018-11-30
  • 2013-04-14
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
相关资源
最近更新 更多