为什么加载的PHP扩展在类实例化时会失败?

为什么加载的PHP扩展在类实例化时会失败?,php,imagemagick,Php,Imagemagick,我有一些代码,根据服务器上的可用内容,使用或GD调整图像大小 我正在使用extension\u loaded()函数测试每种方法的可用性 if (extension_loaded('imagick')) { $image = new Imagick(); ... } 我有一个用户报告他们正在接收: 致命错误:找不到类“Imagick” 什么情况会导致加载Imagick扩展,但类不可用?我应该如何进行测试以使代码更加健壮?区分大小写 “imagick”和imagick您是否可以检

我有一些代码,根据服务器上的可用内容,使用或GD调整图像大小

我正在使用
extension\u loaded()
函数测试每种方法的可用性

if (extension_loaded('imagick')) {
    $image = new Imagick();
    ...
}
我有一个用户报告他们正在接收:

致命错误:找不到类“Imagick”

什么情况会导致加载Imagick扩展,但类不可用?我应该如何进行测试以使代码更加健壮?

区分大小写


“imagick”和
imagick

您是否可以检查该类是否也存在

类_存在(“Imagick”)


1:始终以不区分大小写的方式进行检查(在比较之前将字符串设置为小写)

2:不检查库,检查功能。可能它的库版本有缺陷或者有其他函数名

3:在php.ini中,您可以通过名称显式禁用某些函数,因此我认为您应该求助于第2点,并检查函数是否存在,而不是扩展_*

此外,请查看该客户端服务器上的
/var/log/apache2/errors
或同等版本,以检查ImageMagick扩展生成的任何内部错误(或其他类型的低级错误应在其中报告…)

yum安装ImageMagick yum安装ImageMagick-devel pecl安装imagick echo“extension=imagick.so”>/etc/php.d/imagick.ini 服务httpd重启[/etc/init.d/httpd重启] php-m| grep imagick

你确定这是正确的类名吗?是的,我没有遵循imagick API,但我的一台服务器上实际上也有同样的问题,我认为有不止一个API,所以可能这就是为什么在这种情况下,原来有一个旧版本的库是基于函数的,而不是基于类的。按照Danny Croft的建议,测试功能(在这种情况下,使用
class\u exists()
)可以避免问题。好的建议。 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