2014-10-28 127 views
0

發生通知或警告時,圖像將失敗。但是,我無法收到通知或警告。Imagick不會收到通知或警告

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

上面的代碼應該捕獲,因爲應該是INT時傳遞的字符串。 圖片失敗但catch不執行。我仍然得到這個消息:

注:未定義的常量的使用應是一個數這裏就不琴絃 - /var/www/class.php假定「d」上線15 警告:Imagick :: setimagecompressionquality( )期望參數1要長,在給定的/var/www/class.php上行字符串15

我也嘗試(例外$ E)

+0

因爲這只是一個警告/通知。這不是一個例外。一個例外只會發生,如果事實上'扔'它。 – 2014-10-28 14:08:12

+0

@MarcB好吧,有道理,但圖像輸出仍然失敗,那麼該怎麼辦? – 2014-10-28 14:09:51

+0

不通過無效選項? – 2014-10-28 14:11:10

回答

1

正如上面所說的,您也應該檢查的圖像 - $> setImageCompressionQuality返回值,並且可以隱藏與@通知。

但是,您也可以將代碼中的通知轉換爲例外情況,如this post中所述。這是一個有趣的解決方案,但我不建議遵循它。檢查正確性會更好。

+0

實際上,即使方法失敗(又名通知或警告),該方法的返回值始終爲1,因此不起作用。 – 2014-10-28 23:13:48

1

因爲該方法不會引發一個異常無效輸入的情況。你應該這樣做:

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