Php Imagick不会捕捉通知或警告

Php Imagick不会捕捉通知或警告,php,exception-handling,imagemagick,try-catch,imagick,Php,Exception Handling,Imagemagick,Try Catch,Imagick,当出现通知或警告时,图像将失败。然而,我无法抓住通知或警告 <?php $image = new Imagick($resource); try { $image->setImageCompressionQuality("Should be a Number Here not String"); } catch ( ImagickException $e ) { echo "This is a catch"; //

当出现通知或警告时,图像将失败。然而,我无法抓住通知或警告

<?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!
    }
?>

由于在should为INT时传递的字符串,上面的代码应该捕获。映像失败,但不会执行catch。我仍然收到这样的信息:

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


我还尝试了(Exception$e)

,因为如果输入无效,该方法不会抛出异常。你应该这样做:

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

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


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

因为这只是一个警告/通知。这也不例外。只有当某个东西实际抛出它时才会发生异常。@MarcB Ok,有意义,但图像输出仍然失败,那么该怎么办?不要传递无效选项?@MarcB Lol,是的。人们可能不希望这样,但当您无法控制参数值时,您就遇到了一个严重的问题!很容易测试提供的值是否为数字。实际上,即使失败(即通知或警告),该方法的返回值始终为1,因此不起作用。