【问题标题】:Imagick will not catch Notices or WarningsImagick 不会捕获通知或警告
【发布时间】:2014-10-28 14:03:05
【问题描述】:

当出现通知或警告时,图像会失败。但是,我无法收到通知或警告。

<?php

    $image = new Imagick($resource);

    try {
        $image->setImageCompressionQuality("Should be a Number Here not String");
    }
    catch ( ImagickException $e ) {
        echo "This is a catch"; // should catch here but nope!
    }
?>

上面的代码应该被捕获,因为传递的字符串 when 应该是 INT。 图像失败,但 catch 不执行。我仍然收到此消息:

注意:使用未定义的常量应该是一个数字而不是字符串 - 在第 15 行的 /var/www/class.php 中假定为“d” 警告:Imagick::setimagecompressionquality() 期望参数 1 很长,字符串在第 15 行的 /var/www/class.php 中给出

我也试过(异常 $e)

【问题讨论】:

  • 因为这只是一个警告/通知。这不是一个例外。只有当某些东西实际上是throws 时才会发生异常。
  • @MarcB 好的,有道理,但图像输出仍然失败,那么该怎么办?
  • 不要传入无效选项?
  • @MarcB 哈哈,是的。希望不会,但是当您无法控制参数值时,您就会遇到一个严重的问题!
  • 很容易测试提供的值是否为数字。

标签: php exception-handling imagemagick try-catch imagick


【解决方案1】:

如上所述,您还应该检查 $image->setImageCompressionQuality 的返回值,并且可以使用 @ 隐藏通知。

但您也可以将代码中的通知转换为this post 中所述的异常。这是一个有趣的解决方案,但我不建议遵循它。检查正确性更好。

【讨论】:

  • 实际上该方法的返回值始终为 1,即使它失败(也称为通知或警告),所以它不会起作用。
【解决方案2】:

因为在输入无效的情况下该方法不会引发异常。你应该这样做:

$result = @$image->setImageCompressionQuality("Should be a Number Here not String");
if (!$result) {
    throw new \Exception('Operation has failed');
}

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 2018-05-02
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多