2009-09-25 103 views
3

我有一些代碼調整圖像大小,使用Imagick或GD,這取決於服務器上可用的內容。爲什麼加載的PHP擴展在類實例化時失敗?

我正在測試每個使用extension_loaded()函數的可用性。

if (extension_loaded('imagick')) { 
    $image = new Imagick(); 
    ... 
} 

我有一個用戶報告說,他們正在接受:

Fatal error: Class 'Imagick' not found

會導致Imagick擴展什麼情況下被加載,但該類不可用?我應該如何進行測試才能使我的代碼更健壯?

+0

你確定這是正確的類名嗎? – 2009-09-25 07:05:31

+0

是啊,我沒有按照imagick API,但我實際上在我的服務器上的一個相同的問題,我認爲有更多的一個API左右,所以也許這就是爲什麼 – RageZ 2009-09-25 07:12:12

回答

2

1:總是做檢查以不區分大小寫的方式(比較之前使字符串小寫)

2:不檢查庫中,檢查功能。也許它有一個庫版本的越野車或有其他功能名稱

3:在php.ini中,您可能會明確禁用一些功能名稱,所以我認爲你應該訴諸點#2並檢查與function_exists而不是extension_ *

而且,看看/var/log/apache2/errors或相當於該客戶端的服務器上,以檢查由ImageMagick的延伸產生的任何內部錯誤(segmentation fault或其他類型的低級錯誤,應報告出在那裏?)

+0

在這種情況下,事實證明,有一箇舊版本的函數庫,而不是基於類。測試功能(在這種情況下,使用'class_exists()'作爲Danny Croft的建議,可以避免這個問題。 – drewm 2009-09-30 07:47:10

0

區分大小寫?

'imagick'和Imagick

2

你可以檢查這個類是否也存在?

class_exists("Imagick")

0
 
    yum install ImageMagick 
    yum install ImageMagick-devel 
    pecl install imagick 
    echo "extension=imagick.so" > /etc/php.d/imagick.ini 
    service httpd restart [/etc/init.d/httpd restart] 
    php -m | grep imagick 

Reference