В 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 необходимо выставить в режим «Да» Комментарии: 16
Друзья и уважаемый автор, помогите разобраться… :( пол дня воевали ни до чего не докопались.
Ошибка у меня вышеозвученная, не лечится ничем, уже 3 раза все переставляли, по разному меняли и т.п.
Подскажите хоть в какую сторону копать.
1) Сейчас установлена чистая (нулевая) 2.2.7 поставлены только 2 расширения pdo+minishop
2) Создаем папку товаров, добавляем товар, пытаемся загрузить картинку.
Получаем:
Картинка загрузилась, а папки для превьюшек не создались, соответственно и они сами тоже нет.
В логах 1:1 что и выше, только домен другой.
Ошибка у меня вышеозвученная, не лечится ничем, уже 3 раза все переставляли, по разному меняли и т.п.
Подскажите хоть в какую сторону копать.
1) Сейчас установлена чистая (нулевая) 2.2.7 поставлены только 2 расширения pdo+minishop
2) Создаем папку товаров, добавляем товар, пытаемся загрузить картинку.
Получаем:
Картинка загрузилась, а папки для превьюшек не создались, соответственно и они сами тоже нет.
В логах 1:1 что и выше, только домен другой.
Ответ прост, в настройках системы, в разделе phpThumb, параметр phpthumb_allow_src_above_docroot необходимо выставить в режим «Да»- не дочитали видимо?
Ну как не дочитали, дочитали конечно же. И поставили «Да» все как положено. Еще интересный момент что не первый раз сборку делаем и на другом домене все работает. Единственная разница: на том имясайта.ру, а на этом shop.имясайта.ру все права на все папки одинаковые, и в ручную пробовали папочки для тумбсов делать те что 120х90 и вторая не помню какая, и 777 на них ставили — ни в какую. :(
И даже попробовали сборку 2.2.5 =( тот же результат.
Мое видение ситуации (не профессиональное, потому как не админ и не программист):
Проблемы может быть такие
1) phpTumb не может записать поток во временную переменную сервера /var/tmp — странно потому что там у меня 777
2) phpTumb не может записать файл в кеш модХ, т.е. по пути /core/cache/phpthumb — тоже выставил всей цепочке 777
3) phpTumb не может создать папки для превьюшек — я правда думаю что до этого дело не доходит вообще.
Что думаете?
Проблемы может быть такие
1) phpTumb не может записать поток во временную переменную сервера /var/tmp — странно потому что там у меня 777
2) phpTumb не может записать файл в кеш модХ, т.е. по пути /core/cache/phpthumb — тоже выставил всей цепочке 777
3) phpTumb не может создать папки для превьюшек — я правда думаю что до этого дело не доходит вообще.
Что думаете?
У меня тут дискуссия типа «сам с собой» :) в общем смог залезть рутом на сервер, нашел путь о котором вначале ошибок пишется [3] => setSourceFilename(/var/tmp/uf_89llsZ) set $this->sourceFilename to "/var/tmp/uf_89llsZ" in file «phpthumb.class.php» on line 243
файл создан, но нулевого размера. Права 777, место позволяет.
Все, дальше никаких выводов и предположений сделать не могу. Почему он не создается.
Но хоть понял почему переменная называется что нужно включать «разрешить_положить_исходник_выше_рута».
Поможите други! плиз
файл создан, но нулевого размера. Права 777, место позволяет.
Все, дальше никаких выводов и предположений сделать не могу. Почему он не создается.
Но хоть понял почему переменная называется что нужно включать «разрешить_положить_исходник_выше_рута».
Поможите други! плиз
У меня есть инструкция по настройке сервера — если ей следовать, проблем не возникает практически никогда.
Больше ничего не могу предложить. Убедиться в работоспособности можно на modx-test.com
Больше ничего не могу предложить. Убедиться в работоспособности можно на modx-test.com
Спасибо Василий. Как-то и не хотелось вас дергать, думал кто из пользователей сталкивался. Проблема не однозначная, на другом домене все работает и превьюшки делаются, только мы там столько раз всего передернули (тестовый домен для черновых работ) что уже и не знаю что и как, а попробовали поставить чистую систему и магазин (все в последних версиях чтобы было) и не работает.
Сервер тот же, домены с одинаковыми настройками, только там где чистая сборка поддомен shop… вот и вся разница
Сервер тот же, домены с одинаковыми настройками, только там где чистая сборка поддомен shop… вот и вся разница
Полагаю, что разница всё-таки есть.
Судя по логу, ругань идет именно на то, что phpThumb не может создать файл выше корня сайта. Права в порядке, понятно, но возможно что у вас юзеру сайта вообще запрещено выходить наружу — chroot.
Попробуй изменить конфигурацию php, выстави параметр upload_tmp_dir внутри директории сайта.
Еще проверь, работает ли сниппет phpthumbof, или такая же ругань?
Судя по логу, ругань идет именно на то, что phpThumb не может создать файл выше корня сайта. Права в порядке, понятно, но возможно что у вас юзеру сайта вообще запрещено выходить наружу — chroot.
Попробуй изменить конфигурацию php, выстави параметр upload_tmp_dir внутри директории сайта.
Еще проверь, работает ли сниппет phpthumbof, или такая же ругань?
thumbof работал, вроде проверяли, а вот про то что www не может выйти выше это я что-то не подумал, будем пробовать
Пробуй, а если не получится — пиши, я уже на месте, чем могу, тем помогу :)
Прошу прощения за назойливость.
Я почти достиг цели, но вот одно никак не пойму.
При формировании превьюшки из МиниШоп ей дается некое имя (функция 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;
Вот как то так
Я почти достиг цели, но вот одно никак не пойму.
При формировании превьюшки из МиниШоп ей дается некое имя (функция 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;
Вот как то так
Вот код генерации картинки в галерее, там нет никакой привязки к директориям.
Думаю, это phpThumb не может понять твоё системное окружение.
Думаю, это phpThumb не может понять твоё системное окружение.
Эх, проблему не побороли, хотя очень надо, но решили вопрос отложить, еще раз все проверили, дело именно в хостинге и создании окружения для поддомена.
Хотя пхп_инфо и пишет что все одинаково, но для имясайта.ру ставишь и все работает, даже без свойства «Да» что в первом сообщении, а если заливаешь на shop.имясайта.ру — не работает phpThumb
Временно решили сделать магазин на имясайта.ру/shop/ а дальше может разрулится что-нибудь.
Спасибо за поддержку
Хотя пхп_инфо и пишет что все одинаково, но для имясайта.ру ставишь и все работает, даже без свойства «Да» что в первом сообщении, а если заливаешь на shop.имясайта.ру — не работает phpThumb
Временно решили сделать магазин на имясайта.ру/shop/ а дальше может разрулится что-нибудь.
Спасибо за поддержку
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
<Directory /var/www/example.com>
php_admin_value open_basedir /var/www/example.com/:/tmp/:/
Order deny,allow
Allow from all
Options -Indexes
В системных настройках есть директива phpthumb_allow_src_above_docroot
Она разрешает выходить за пределы докрута хттп сервера. Мне помогло. С точки зрения безопасности не очень правильно ее включать, но на дефолтных настройках работает.
Она разрешает выходить за пределы докрута хттп сервера. Мне помогло. С точки зрения безопасности не очень правильно ее включать, но на дефолтных настройках работает.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.