четверг, 1 августа 2013 г.

Как побороть ошибку phpThumb в MODx [OutputThumbnail() failed because !is_resource($this->gdimg_output)]

У очень многих людей, установивших MODx Revolution, возникает проблема с тем, что не показываются превью к картинкам в файловом редакторе, при этом в файле error.txt (Reports->Error log, а в русской версии Отчёт->Журнал ошибок) появляется ошибка типа:
[2013-08-01 00:02:25] (ERROR @ /connectors/system/phpthumb.php) phpThumb was unable to generate a thumbnail for: /var/www/core/cache/phpthumb/phpThumb_cache_site.ru_srcdc8485f6e9b68beb8824f8f795acc2e7_par02a1b054e8467fb1e234c8a8fd8d10d2_dat1375288827.png
[2013-08-01 00:02:25] (ERROR @ /connectors/system/phpthumb.php) Error outputting thumbnail:
OutputThumbnail() failed because !is_resource($this->gdimg_output) in file "phpthumb.class.php" on line 557
В сообществе MODx предлагается несколько способов борьбы с этим (сразу скажу, они мне не помогли и я нашел своё решение) :

  1. Разрешить использование файлов, расположенных НЕ в корневой директории. Для этого идём в настройки и ищем ключ "setting_phpthumb_allow_src_above_docroot", устанавливаем его в True (Да).


  2. В этом варианте, нужно проверить правильно ли у вас установлены права на папку core/cache/phpthumb, если директории phpthumb нету вообще, значит установлены маленькие права на папку cache.
    Самое простое, на короткое время тестирования, установить на все три директории (core / cache / phpthumb) полные права — 0777. Это позволит вам сразу понять есть ли проблема в правах на директории. 0777 это максимальные права, устанавливать их на долгое время настоятельно не рекомендуется. Если phpThumb заработает, то начните уменьшать права на папки по очереди (сначала на core, потом на cache) и найдите то сочетание прав, при которых phpThumb продолжает работать.

  3. Многие устанавливают на хостинг PHP-оптимизатор eAccelerator, который так же может приводить к проблемам с генерацией превью картинок. Для отключения eAccelerator, найдите файл eaccelerator.ini (в Debian он находится по пути /etc/php5/conf.d/) и закоментируйте строчку:
    extension="eaccelerator.so"
    должно получиться вот так:
    ;extension="eaccelerator.so"
    после этого перезагрузите Apache, командой:
    service apache2 restart

  4. Лично мне все эти способы не помогли. Причина проблемы у меня была в том, что в файле php.ini не было точно указано выделяемое количество памяти (параметр memory_limit), т.е. значение было — -1. Я проставил выставил значение
    memory_limit = 128M
    и всё заработало!