如果Imagick :: pingImage()返回false,则Php代码中断

时间:2012-08-31 13:15:41

标签: php imagick

<?php
   $im = new Imagick();
   if ($im->pingImage('1.jpg')) {
       $image_info = $im->identifyImage();
       print_r($image_info);
   }
   else {
       echo 'image doesn't exist';
   }
?>

如果我传递给pingImage一个真实的图像名称,那么print_r会显示一个带参数的数组。但是,如果我传递给pingImage不是真正的图像名称,没有任何反应,但我希望输出“图像不存在”。同时,如果我在条件之前添加echo输出,则此echo确实有效。

通常代码在pingImage返回false之前一直有效。

我在Imagick文档中找不到答案。

2 个答案:

答案 0 :(得分:2)

你的代码中的语法错误,在else子句中。它应该是:

echo "image doesn't exist";

echo 'image doesn\'t exist';

(事件SO突出显示应告诉你有错误:)。并使您的代码更加清晰,并首先使用file_exists()来查看您希望文件名是否真正指向您可以访问的文件:

if( file_exists( $fileName ) ) {
   $im = new Imagick();
   if ($im->pingImage( $fileName )) {
       $image_info = $im->identifyImage();
       print_r($image_info);
   } else {
     printf("Can't get image attributes of %s", htmlspecialchars( $fileName ));

   }
} else {
   printf("Can't open file %s", htmlspecialchars( $fileName ));
}

答案 1 :(得分:0)

我在另一个问题中找到了答案:https://stackoverflow.com/a/4613341/678026 我需要做的就是应用 try - catch 构造:

$im = new Imagick();
try {
    $im->pingImage('3.jpg');
}
catch(ImagickException $e) {
    echo "image doesn't exist";
}