想象安装错误 - 类未定义

时间:2009-06-23 19:27:33

标签: php imagick

好的,这是关于什么的细分:

  1. <? $foo = new Imagick(); ?>从命令行运行时没有错误(例如,sudo php myscript.php
  2. 但是,当通过网络浏览器运行时,我得到Fatal error: Class 'Imagick' not found in /var/www/lhackwith_www/test_html/magic.php on line 1
  3. magickwand未安装
  4. extension = imagick.so在imagick.ini中,根据phpInfo()成功读取;
  5. 但是,想象力并没有出现在PHP信息中。
  6. 任何建议都将受到赞赏。

4 个答案:

答案 0 :(得分:3)

将ubuntu从12.04升级到12.10后,我遇到了类似的想法问题。

经过多次摆弄后我终于发现需要一个不同的包(对于php5?)并修复它:

sudo apt-get install php5-imagick

答案 1 :(得分:2)

我认为你绝对相信你已经编辑了正确的php.ini ...
您是否检查了网络服务器的error.log以获取提示?您可能希望增加该测试的LogLevel。如果是apache,请参阅http://httpd.apache.org/docs/2.2/mod/core.html#loglevelhttp://httpd.apache.org/docs/2.2/logs.html#errorlog

或者ldd - print shared library dependencies可以解释这个问题:

<?php
$p = get_cfg_var('extension_dir');
$modpath = $p.DIRECTORY_SEPARATOR.'imagick.so';
echo $modpath, is_readable($modpath) ? ' readable':' not readable', "<br />\n";
echo '<pre>';
passthru('ldd '.$modpath.' 2>&1'); // in case of spaces et al in the path-argument use escapeshellcmd()
echo '</pre>';
请在命令行和网络服务器上运行此脚本。是否抱怨缺少依赖?


edit2:所以在网络服务器“内”运行的脚本甚至无法看到扩展名.so ...让我们测试一下故障开始路径的哪一点
<?php
function foo($path) {
  if ( $path==($dir=dirname($path)) ) {
    return;
  }
  foo($dir);

echo is_dir($path) ? ' d':' -', is_readable($path) ? 'r':'-', is_writable($path) ? 'w':'-', is_executable($path) ? 'x ':'- ', $path, "<br />\n"; }

$modpath = get_cfg_var('extension_dir').DIRECTORY_SEPARATOR.'imagick.so'; foo($modpath);

答案 2 :(得分:0)

您使用的是哪种操作系统?我在Mac OSX上遇到了一些问题,这些问题基本上使安装一些扩展非常痛苦。但是,对于大多数操作系统来说,Imagick安装应该非常简单。

在命令行中,键入php -i | grep ini,并确保列出的php.ini与正在加载的phpinfo()所说的php.ini相同。如果这些不同,那就是你必须开始的地方。确保extension = imagick.so在两个ini文件中,同时 - 验证他们是从同一目录加载扩展名(他们有99%的可能性,但谁知道 - 你可能是一个例外)。

在您确认(可能)两个php.ini文件都加载了imagick.so并且它仍然无法正常工作之后,请尝试将-f / path / to / apache / error_log拖尾(假设您使用的是apache,当然..)并重启apache。您正在寻找有关加载库和/或扩展的php警告。希望它会指出你正确的方向。

希望这有帮助,

吉姆

答案 3 :(得分:0)

我最终做了什么:

在DB中存储图像的方向,然后使用alternatiff将图像动态旋转到存储的方向。无需图像处理。

感谢您的帮助。