В MiniShop2 не создаются превью

После обновления MODX до версии 2.2.7 и MiniShop2 до версии 2.0.0-pl2 не генерировались превью галереи товаров. В логах это:
[2013-04-14 13:53:00] (ERROR @ /assets/components/minishop2/connector.php) Could not generate thumbnail for "/assets/images/products/59/cc408f44783eaa3d1a7bb0d38b3582e0.jpg". Array
(
    [0] => phpThumb() v1.7.9-200712090829 in file "phpthumb.class.php" on line 216
    [1] => setCacheDirectory() starting with config_cache_directory = "/var/www/streamfilters/streamfilters.com.ua/core/cache/phpthumb/" in file "phpthumb.class.php" on line 919
    [2] => setting config_cache_directory to realpath(/var/www/streamfilters/streamfilters.com.ua/core/cache/phpthumb) = "/var/www/streamfilters/streamfilters.com.ua/core/cache/phpthumb" in file "phpthumb.class.php" on line 947
    [3] => setSourceFilename(/tmp/uf_RMMwPC) set $this->sourceFilename to "/tmp/uf_RMMwPC" in file "phpthumb.class.php" on line 243
    [4] => $AvailableImageOutputFormats = array(text;ico;bmp;wbmp;gif;png;jpeg) in file "phpthumb.class.php" on line 884
    [5] => $this->thumbnailFormat set to $this->config_output_format "jpeg" in file "phpthumb.class.php" on line 895
    [6] => $this->thumbnailFormat set to $this->f "jpeg" in file "phpthumb.class.php" on line 902
    [7] => $this->thumbnailQuality set to "99" in file "phpthumb.class.php" on line 912
    [8] => !$this->config_allow_src_above_docroot therefore setting "/tmp/uf_RMMwPC" (outside "/var/www/streamfilters/streamfilters.com.ua") to null in file "phpthumb.class.php" on line 1066
    [9] => $this->sourceFilename set to "" in file "phpthumb.class.php" on line 813
    [10] => phpThumb() v1.7.9-200712090829

"" does not exist in file "phpthumb.class.php" on line 3647
    [11] => setCacheDirectory() starting with config_cache_directory = "/var/www/streamfilters/streamfilters.com.ua/core/cache/phpthumb" in file "phpthumb.class.php" on line 919
    [12] => setting config_cache_directory to realpath(/var/www/streamfilters/streamfilters.com.ua/core/cache/phpthumb) = "/var/www/streamfilters/streamfilters.com.ua/core/cache/phpthumb" in file "phpthumb.class.php" on line 947
    [13] => !$this->config_allow_src_above_docroot therefore setting "/tmp/uf_RMMwPC" (outside "/var/www/streamfilters/streamfilters.com.ua") to null in file "phpthumb.class.php" on line 1066
    [14] => SetCacheFilename() _src set from md5($this->sourceFilename) "" = "d41d8cd98f00b204e9800998ecf8427e" in file "phpthumb.class.php" on line 3077
    [15] => SetCacheFilename() _par set from md5(_bg000000_farC_h270_w360_dpi150_q99) in file "phpthumb.class.php" on line 3110
    [16] => starting ExtractEXIFgetImageSize() in file "phpthumb.class.php" on line 2897
    [17] => GetImageSize("") failed in file "phpthumb.class.php" on line 2920
    [18] => $this->useRawIMoutput=false because "bg" is set in file "phpthumb.class.php" on line 1226
    [19] => $this->useRawIMoutput=false after checking $UnAllowedParameters in file "phpthumb.class.php" on line 1232
    [20] => ImageMagickThumbnailToGD() aborting because $this->sourceFilename is empty in file "phpthumb.class.php" on line 1279
    [21] => ImageMagickThumbnailToGD() failed in file "phpthumb.class.php" on line 2927
    [22] => SetOrientationDependantWidthHeight() starting with ""x"" in file "phpthumb.class.php" on line 2876
    [23] => SetOrientationDependantWidthHeight() setting w="360", h="270" in file "phpthumb.class.php" on line 2892
    [24] => EXIF thumbnail extraction: (size=0; type=""; 0x0) in file "phpthumb.class.php" on line 2979
    [25] => starting SourceImageToGD() in file "phpthumb.class.php" on line 3229
    [26] => $this->useRawIMoutput=false because "bg" is set in file "phpthumb.class.php" on line 1226
    [27] => $this->useRawIMoutput=false after checking $UnAllowedParameters in file "phpthumb.class.php" on line 1232
    [28] => ImageMagickThumbnailToGD() aborting because $this->sourceFilename is empty in file "phpthumb.class.php" on line 1279
    [29] => Not using EXIF thumbnail data because $this->exif_thumbnail_data is empty in file "phpthumb.class.php" on line 3278
    [30] => $this->gdimg_source is still empty in file "phpthumb.class.php" on line 3330
    [31] => ImageMagickThumbnailToGD() failed in file "phpthumb.class.php" on line 3332
    [32] => phpThumb() v1.7.9-200712090829

Unknown image type identified by "" () in SourceImageToGD()[3444] in file "phpthumb.class.php" on line 3647
    [33] => SourceImageToGD() failed in file "phpthumb.class.php" on line 323
)
Ответ прост, в настройках системы, в разделе phpThumb, параметр phpthumb_allow_src_above_docroot необходимо выставить в режим «Да»
Виктор Долгий
14 апреля 2013, 11:08
modx.pro
3 777
0

Комментарии: 16

Дмитрий Век
15 мая 2013, 16:14
0
Друзья и уважаемый автор, помогите разобраться… :( пол дня воевали ни до чего не докопались.
Ошибка у меня вышеозвученная, не лечится ничем, уже 3 раза все переставляли, по разному меняли и т.п.
Подскажите хоть в какую сторону копать.

1) Сейчас установлена чистая (нулевая) 2.2.7 поставлены только 2 расширения pdo+minishop
2) Создаем папку товаров, добавляем товар, пытаемся загрузить картинку.

Получаем:
Картинка загрузилась, а папки для превьюшек не создались, соответственно и они сами тоже нет.

В логах 1:1 что и выше, только домен другой.
    Алексей Марченко
    15 мая 2013, 16:32
    0
    Ответ прост, в настройках системы, в разделе phpThumb, параметр phpthumb_allow_src_above_docroot необходимо выставить в режим «Да»- не дочитали видимо?
      Дмитрий Век
      15 мая 2013, 18:07
      0
      Ну как не дочитали, дочитали конечно же. И поставили «Да» все как положено. Еще интересный момент что не первый раз сборку делаем и на другом домене все работает. Единственная разница: на том имясайта.ру, а на этом shop.имясайта.ру все права на все папки одинаковые, и в ручную пробовали папочки для тумбсов делать те что 120х90 и вторая не помню какая, и 777 на них ставили — ни в какую. :(
        Дмитрий Век
        15 мая 2013, 18:08
        0
        И даже попробовали сборку 2.2.5 =( тот же результат.
        Дмитрий Век
        15 мая 2013, 18:47
        0
        Мое видение ситуации (не профессиональное, потому как не админ и не программист):
        Проблемы может быть такие
        1) phpTumb не может записать поток во временную переменную сервера /var/tmp — странно потому что там у меня 777
        2) phpTumb не может записать файл в кеш модХ, т.е. по пути /core/cache/phpthumb — тоже выставил всей цепочке 777
        3) phpTumb не может создать папки для превьюшек — я правда думаю что до этого дело не доходит вообще.

        Что думаете?
          Дмитрий Век
          15 мая 2013, 18:55
          0
          У меня тут дискуссия типа «сам с собой» :) в общем смог залезть рутом на сервер, нашел путь о котором вначале ошибок пишется [3] => setSourceFilename(/var/tmp/uf_89llsZ) set $this->sourceFilename to "/var/tmp/uf_89llsZ" in file «phpthumb.class.php» on line 243

          файл создан, но нулевого размера. Права 777, место позволяет.
          Все, дальше никаких выводов и предположений сделать не могу. Почему он не создается.

          Но хоть понял почему переменная называется что нужно включать «разрешить_положить_исходник_выше_рута».

          Поможите други! плиз
            Василий Наумкин
            15 мая 2013, 19:02
            0
            У меня есть инструкция по настройке сервера — если ей следовать, проблем не возникает практически никогда.

            Больше ничего не могу предложить. Убедиться в работоспособности можно на modx-test.com
              Дмитрий Век
              15 мая 2013, 19:18
              0
              Спасибо Василий. Как-то и не хотелось вас дергать, думал кто из пользователей сталкивался. Проблема не однозначная, на другом домене все работает и превьюшки делаются, только мы там столько раз всего передернули (тестовый домен для черновых работ) что уже и не знаю что и как, а попробовали поставить чистую систему и магазин (все в последних версиях чтобы было) и не работает.

              Сервер тот же, домены с одинаковыми настройками, только там где чистая сборка поддомен shop… вот и вся разница
                Василий Наумкин
                15 мая 2013, 19:37
                0
                Полагаю, что разница всё-таки есть.

                Судя по логу, ругань идет именно на то, что phpThumb не может создать файл выше корня сайта. Права в порядке, понятно, но возможно что у вас юзеру сайта вообще запрещено выходить наружу — chroot.

                Попробуй изменить конфигурацию php, выстави параметр upload_tmp_dir внутри директории сайта.

                Еще проверь, работает ли сниппет phpthumbof, или такая же ругань?
                  Дмитрий Век
                  15 мая 2013, 20:10
                  0
                  thumbof работал, вроде проверяли, а вот про то что www не может выйти выше это я что-то не подумал, будем пробовать
                    Виктор Долгий
                    15 мая 2013, 21:53
                    0
                    Пробуй, а если не получится — пиши, я уже на месте, чем могу, тем помогу :)
                    Дмитрий Век
                    15 мая 2013, 22:24
                    0
                    Прошу прощения за назойливость.
                    Я почти достиг цели, но вот одно никак не пойму.

                    При формировании превьюшки из МиниШоп ей дается некое имя (функция setSourceFilename) — и формирует путь до исходника, что нибудь типа uf_dnAmer, по идее он должен записывать в директорию upload_tmp_dir, которая указана в настройках PHP

                    в дампе выше это сточка [3] там путь setSourceFilename(/tmp/uf_RMMwPC)
                    — Но у меня ($filename) формируется /var/tmp/uf_dnAmer и я нигде не могу найти, где это можно поменять, а точнее совсем убрать, поэтому что это не правильный путь,

                    в окружении пхп путь до временной стоит /tmp/www

                    А откуда берется /var/tmp/, не могу разобраться, смотрел везде, в том числе и /core/model/phpthumb/

                    От этого проблема и формируется, дальше идет функция ResolveFilenameToAbsolute($filename)
                    И она мне собирает путь: $AbsoluteFilename = $this->config_document_root.$filename;

                    Вот как то так
                      Василий Наумкин
                      16 мая 2013, 07:18
                      0
                      Вот код генерации картинки в галерее, там нет никакой привязки к директориям.

                      Думаю, это phpThumb не может понять твоё системное окружение.
                        Дмитрий Век
                        16 мая 2013, 11:35
                        0
                        Эх, проблему не побороли, хотя очень надо, но решили вопрос отложить, еще раз все проверили, дело именно в хостинге и создании окружения для поддомена.

                        Хотя пхп_инфо и пишет что все одинаково, но для имясайта.ру ставишь и все работает, даже без свойства «Да» что в первом сообщении, а если заливаешь на shop.имясайта.ру — не работает phpThumb

                        Временно решили сделать магазин на имясайта.ру/shop/ а дальше может разрулится что-нибудь.
                        Спасибо за поддержку
              Ильдар
              13 ноября 2013, 23:21
              0
              phpthumb пытается создать temp файл в директории /tmp к которой естественно у пользователя http сервера нету доступа. Отсюда сыпятся ошибки. Для себя решил таким образом (добавить в конфигурацию виртуального хоста апача):
              <Directory /var/www/example.com>
              php_admin_value open_basedir /var/www/example.com/:/tmp/:/
              Order deny,allow
              Allow from all
              Options -Indexes
                Sergey
                28 апреля 2020, 12:21
                0
                В системных настройках есть директива phpthumb_allow_src_above_docroot

                Она разрешает выходить за пределы докрута хттп сервера. Мне помогло. С точки зрения безопасности не очень правильно ее включать, но на дефолтных настройках работает.
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  16