Ошибка работы phpThumb в MODX 2.5.1


В MODX 2.5.1 обновили phpThumb, после чего некоторые дополнения стали неверно работать с картинками.

Проблема встречается на серверах с включенным open_basedir (запрет скриптам выходить из директории сайта) из-за того, что авторы MODX не указывают временную директорию при инициализации.

Для исправления нужно добавить
$this->setParameter('config_temp_directory',$cachePath);
на 34 строке файла core/model/phpthumb/modphpthumb.class.php

Вторая проблема касается уже непосредственно дополнений, таких как phpthumbon. Конкретно он не вызывает метод initialize() при запуске класса modPhpThumb, в результате чего настройки директорий вообще не выставляются.

Здесь нужно добавить
$this->_phpThumb->initialize();
на 165 строке файла core/components/phpthumbon/model/phpthumbon/phpthumbon.class.php

Если вы видите проблемы с генерацией картинок на MODX 2.5.1 — попробуйте внести эти изменения или вернуться на 2.5.0 обновиться на 2.5.2.

Pull-request в репозиторий MODX и текущему автору phpthumbon — отправил.

Обновлено 02.10.2016

Для работы превью в Gallery нужно зайти в файл core/components/gallery/processors/web/phpthumb.php и заменить там
if (!class_exists('modPhpThumb', false)) {
    if (!$modx->loadClass('modphpthumb', MODX_CORE_PATH . 'model/phpthumb/', true, true)) {
        $modx->log(modX::LOG_LEVEL_ERROR, '[phpThumbOf] Could not load modPhpThumb class.');
        return '';
    }
}
на строке 14, а потом
$phpThumb = new modPhpThumb($modx); // unfortunately we have to create a new object for each image!
$phpThumb->initialize();
на строке 83.

Как видим, даже классические общепринятые дополнения MODX могут неправильно работать с системными модулями.
16 сентября 2016, 16:22    Василий Наумкин   G+  
13    1286 +11

Комментарии (18)

  1. Владимир 16 сентября 2016, 16:33 # 0
    Да-да! Это досадная ерундовина уже заставила меня откатывать назад к 2.5.0.
    Отправил спасибо :)
    1. Василий Наумкин 16 сентября 2016, 16:35 # +3
      Получил, на здоровье!
    2. Марат Марабар 16 сентября 2016, 16:43 # 0
      Я у себя вылечил так: в php.ini указал путь до общей временной папки
      sys_temp_dir = /path/to/tmp/directory
      
      Вместо /path/to/tmp/directory, что-то типа такого: /var/www/site_name/tmp
      1. Василий Наумкин 16 сентября 2016, 16:47 # 0
        Включенный open_basedir подразумевает собственную временную директорию внутри рабочей директории каждого сайта, а не одну общую.

        А phpThumb ломится в /tmp, если у него не указана правильная временная директория — именно для этого нужен первый фикс.
        1. Марат Марабар 16 сентября 2016, 16:56 # 0
          Да-да, я ошибся. Не в php.ini в /etc/php/7.0/fpm/pool.d/site_name.conf (посмотрел), т.е. не общий временный каталог а для каждого сайта.
          php_admin_value[sys_temp_dir] = /var/www/site_name/tmp
          
          1. Василий Наумкин 16 сентября 2016, 17:04 # 0
            Нужно иметь в виду, что эта настройка появилась только в PHP 5.5.
      2. Павел Гвоздь 16 сентября 2016, 17:47 # +4
        Спасибо! Обновил пакет в Modstore.
        1. Василий Наумкин 16 сентября 2016, 17:50 # +2
          В репозитории MODX уже тоже смерджили, так что будет исправлено в 2.5.2
          1. Rahim Egamov 29 сентября 2016, 04:29 # 0
            Павел если ест возможность добавте выбор папки для phpthumbon.images_dir вне assets хотел перевести изображении на субдомен!
            1. Павел Гвоздь 29 сентября 2016, 21:42 # 0
              Лучше отправляйте PR — github.com/gvozdb/phpthumbon :)
              Главное, чтобы у других ничего не слетело!
          2. Василий Столейков 16 сентября 2016, 18:04 # 0
            Спасибо! Очень вовремя!
            1. Abu 17 сентября 2016, 15:47 # 0
              Компонент Gallery глючит несмотря на изменения, не хочет показывать эскизы в админке.

              [2016-09-17 15:45:41] (ERROR @ /var/www/site/site.ru/core/model/phpthumb/phpthumb.class.php: 1215) PHP warning: realpath(): open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/var/www/site/)
              1. Василий Наумкин 17 сентября 2016, 16:18 # 0
                Нужно проверить как у него дела с инициализацией modPhpThumb.
              2. Андрей 19 сентября 2016, 16:34 # 0
                А у меня с Gallery какая-то беда. Фото в альбом загружается, а картинки пустые.
                prntscr.com/cjt40z
                Может тоже проблема с 2.5.1?
                1. Владислав 18 ноября 2016, 10:08 # 0
                  Аналогично.
                  На сайте работает норм, а в админке — не грузятся
                  1. Василий Наумкин 18 ноября 2016, 10:16 # +1
                    Заметку слабо до конца прочитать?
                2. Василий Краковецкий 05 октября 2016, 12:52 # 0
                  github.com/modxcms/pThumb/pull/45 — патч для pthumb
                  1. smeh 15 августа 2017, 19:47 # 0
                    Спасибо автору, все заработало после изменений в файле phpthumb.php, как указано в конце статьи.
                    Вы должны авторизоваться, чтобы оставлять комментарии.