На новом хостинге столкнулся с тем, что упорно не хотят грузиться аватарки. При загрузке выдается сообщение "Указанный файл pict.jpg не может быть загружен. Разрешены только JPEG, PNG и GIF изображения."
В логах при этом наблюдается следующее:
---
is_file() [function.is-file]: open_basedir restriction in effect. File(/tmp/php6JVfAe) is not within the allowed path(s): (/path/to/user/homedir:.) в файле /path/to/user/homedir/public_html/site.ru/includes/image.inc в строке 117.
---
При детальном разборе ситуации оказалось, что у хостера прописан open_basedir (/path/to/user/homedir:.), а Друпал упорно пытается загружать аватарки через папочку /tmp в корне сервера. Никакие ухищрения с настройками временной папки в admin/settings/file-system не помогли, прописывал туда и /tmp, и tmp (без слеша), и /path/to/user/homedir/public_html/site.ru/tmp - все бесполезно, друпал упорно пытается грузить аватарки именно через /tmp в корне сервера...
При этом через upload и через imce файлы загружаются нормально.
Вопрос, собственно, в сабже: что это, баг или фича? И что сейчас делать? Крайне маловероятно, что хостер согласиться открыть /tmp в корне сервера, убрать open_basedir и т.п...
PS. Сменить хостера и хакать ядро Друпала не предлагать;)
Комментарии
создать папку temp, дать ей права на запись и в admin/settings/file-system прописать полный путь до этой папки
Так и делал, не помогло...
Создайте файл info.php в корне сайта:
<?php
phpinfo();
?>
Запустите его в браузере http://yoursite.ru/info.php
Найдите строчку upload_tmp_dir, там указан путь к временной папке хостинга
Да, есть такая...
там написано: /path/to/user/homedir/tmp
Ее и прописать как "временную папку" в admin/settings/file-system ? Попробую...
P.S. Кстати, файлик info.php делать не обязательно, достаточно под админом зайти на страничку http://сайт.ru/admin/reports/status/php
Интересно, не знал об этом )))
если проблема в open_basedir то имеет смысл попробовать поменять open_basedir через .htaccess или php.ini или в php-коде через ini_set()
Что-то сомневаюсь, что прав хватит... зачем тогда хостеру делать такие настройки, если любой пользователь может так легко их обойти?:)
Да и вопрос-то не столько в этом... Рецепт sergeir еще не пробовал, руки не дошли, но если не поможет, то получается, что выплыл принципиальный баг Друпала... вот только неужто до меня никто на него не напарывался? о_О
чем черт не шутит? У меня был случай с возможностью изменять директиву auto_prepend_file на бесплатном хостинге, не говорю уж о прочтении содержимого этого инклюда средствами PHP. Пароли админские к БД кстати там хранились -) Рекламу с помощью него подрубали.
Рецепт sergeir оказался правильным, пасиб большое!