Ошибки установки Imagick - класс не определен - PullRequest
2 голосов
/ 23 июня 2009

Хорошо, вот разбивка того, что случилось:

  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. Волшебная палочка не установлена ​​
  4. extension = imagick.so находится в imagick.ini, который успешно читается в соответствии с phpInfo ();
  5. Однако imagick НЕ отображается в информации PHP.

Любой совет будет оценен.

Ответы [ 4 ]

3 голосов
/ 10 ноября 2012

У меня была похожая проблема с imagick после обновления Ubuntu с 12.04 до 12.10.

После долгих хлопот я обнаружил, что нужен другой пакет (для php5?) И исправил его:

sudo apt-get install php5-imagick
2 голосов
/ 24 июня 2009

Я так понимаю, вы абсолютно уверены, что отредактировали правильный php.ini ...
Вы проверили error.log веб-сервера на наличие подсказок? Возможно, вы захотите увеличить LogLevel для этого теста. Если это апач см. http://httpd.apache.org/docs/2.2/mod/core.html#loglevel и http://httpd.apache.org/docs/2.2/logs.html#errorlog

или, может быть, ldd - печать зависимостей общей библиотеки может пролить свет на проблему:

<code><?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 '
'; , пожалуйста, запустите этот скрипт как в командной строке, так и через веб-сервер. Жалуется ли на отсутствующую зависимость?


edit2: Таким образом, скрипт, работающий «внутри» веб-сервера, даже не может видеть расширение .so ... Давайте проверим, в какой точке пути начинается проблема
<?php
function foo($path) {
  if ( $path==($dir=dirname($path)) ) {
    return;
  }
  foo($dir);</p>

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

<p>$modpath = get_cfg_var('extension_dir').DIRECTORY_SEPARATOR.'imagick.so';
foo($modpath);
0 голосов
/ 03 июля 2009

Что я в итоге делал:

Сохранение ориентации изображения в БД и последующее использование альтернативного алгоритма для динамического поворота изображения в сохраненную ориентацию. Нет необходимости в манипуляциях с изображениями.

Спасибо за вашу помощь, хотя.

0 голосов
/ 30 июня 2009

Какую операционную систему вы используете? У меня было несколько проблем на Mac OSX, что в основном делает установку некоторых расширений ОЧЕНЬ болезненной. Однако установка Imagick должна быть очень простой для большинства операционных систем.

В командной строке введите php -i | grep ini и убедитесь, что php.ini, который указан как загруженный, совпадает с php.ini, который, как говорит phpinfo (), загружается. Если они разные, это то, где вы должны начать. Убедитесь, что расширение = imagick.so находится в обоих ini-файлах, а также - убедитесь, что они загружают расширения из одного и того же каталога (вероятность 99% - это будет, но кто знает - вы можете быть исключением).

После того, как вы убедились, что (возможно) оба файла php.ini загружают imagick.so, и он все еще не работает, попробуйте подключить -f / path / to / apache / error_log (если вы используете apache, конечно ..) и перезагрузите apache. Вы ищете здесь предупреждения php о загрузке библиотек и / или расширений. Надеюсь, это укажет вам правильное направление.

Надеюсь, это поможет,

Jim

...