Ошибки установки Imagick - Класс не определен

StackOverflow https://stackoverflow.com/questions/1034628

  •  06-07-2019
  •  | 
  •  

Вопрос

Хорошо, вот краткое изложение того, что произошло:

  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. Однако imagick НЕ отображается в PHP info.

Буду признателен за любой совет.

Это было полезно?

Решение

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

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

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


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

echo is_dir($путь) ?'d':' -', доступен ли для чтения ($path) ?'r':'-', доступен для записи ($path)?'w':'-', is_executable($path)?'x':'- ', $path, "<br /> ";}

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

Другие советы

У меня была аналогичная проблема с imagick после обновления ubuntu с 12.04 до 12.10.

После долгой возни я в конце концов обнаружил, что нужен другой пакет (для php5?) и исправил его с помощью:

sudo apt-get install php5-imagick

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

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

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

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

Джим

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

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

Но все же спасибо за вашу помощь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top