Ошибки установки Imagick - Класс не определен
Вопрос
Хорошо, вот краткое изложение того, что произошло:
<? $foo = new Imagick(); ?>
работает без ошибок при запуске из командной строки (например, sudo php myscript.php- Однако при запуске через веб-браузер я получаю
Fatal error: Class 'Imagick' not found in /var/www/lhackwith_www/test_html/magic.php on line 1
. - magickwand не установлен
- extension=imagick.so находится в файле imagick.ini, который успешно считывается в соответствии с phpInfo();
- Однако 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 для динамического поворота изображения в ту ориентацию, которая была сохранена.Никаких манипуляций с изображением не требуется.
Но все же спасибо за вашу помощь.