Lab / Drupal

Drupal Проблема при загрузке файлов php7 Beget [Для себя]

Столкнулся с очень странно хреновиной, после обновлени версии php до php7 на хостинге Beget.com (на других тоже такое случалось) перестают загружаться файлы на сервер. Выдаёт ошибку "Файл не может быть загружен" В журнале всё так же "подробно" — "Директория загрузки public://field/image для поля файла field_image не может быть создано или недоступно. Поэтому недавно загруженные файлы не могут быть сохранены в этой директории, и загрузка отменена."

В общем мать всея подробности и очевидности!

Методом тыка удалось выявить такое решение:

Обновляем Drupal до последней версии

Убеждаемся что в /sites/defaul/files/ есть файл .htaccess если нет, закачиваем его туда из оригинального дистрибутива Drupal

Далее рекурсивно применяем права 766 к /sites/defaul/files/ и всем вложенным файлам

Тут (file system) ваш-домен.ру/admin/config/media/file-system должно быть так: первая строка - sites/default/files вторая - пусто. третья строка внимание актуально только для хостинга Beget /home/u/username/ваш-домен.ру/public_html/tmp/ (ниже расскажу алгоритм для других хостингов)

Третья строка очень индивидуальна и необходимо подстроить её под ваши параметры:

/home/ - актуально для васех

/u/ - Всегда первая буква вашего юзера от beget не от друпала!

/username/ - ваш логин от beget не от юзера

/ваш-домен.ру/ - папка в которой лежит ваш сайт, не всегда соответствует домену, смотрите FTP

Если у вас не Beget:

На других хостингах мне тоже доводилось ловить такой глюк, разница только в том, что нужно узнать ваш частный случай, рассположения папки tmp для временных файлов относительно корневой папки сервера. Что бы узнать рассположение, создайте в корневой папке любой php файл, например pathinfo.php и скопируйте в него данный код:

 $serinfo = $_SERVER['DOCUMENT_ROOT'];
 print $serinfo;

Затем откройте данный файл в браузере ваш_сайт.ру/pathinfo.php и там будет абсолютный путь на сервере который вам и нужно указать друпалу. Не забудте добавить /tmp/ в конце.