Файл не загружается - пределы, права, типы, веб-сервер
Картинка или документ не загружается в админке: страница молчит, обрывается или показывает ошибку сети. Разбираем причины по убыванию частоты.
Как проверить
Смотрим пределы на стороне языка:
php -i | grep -E "upload_max_filesize|post_max_size|max_file_uploads"# размер запроса ограничивает post_max_size: он должен быть больше размера файла# у веб-сервера и консоли настройки бывают разными, смотреть нужно веб-версиюДва предела работают вместе, и меньший побеждает. Файл в двадцать мегабайт не загрузится при пределе запроса в восемь, даже если предел самого файла подняли до сотни.
Проверяем права на каталог загрузок:
ls -ld upload upload/tmpsudo -u www-data test -w upload && echo "запись есть" || echo "записи нет"df -h | grep -E "/$|/home" # и место на диске под сами файлыСмотрим, что отвечает сервер при загрузке:
tail -f /var/log/nginx/error.log &# и повторяем загрузку: превышение предела тела запроса видно здесь сразуgrep -i "client intended to send too large body" /var/log/nginx/error.log | tail -3Ошибка сети в браузере почти всегда означает отказ веб-сервера. Он обрывает запрос до того, как тот доходит до платформы, поэтому в журнале сайта такой случай не отражается вовсе.
Проверяем ограничения самой платформы:
echo ini_get('upload_max_filesize'), ' ', ini_get('post_max_size'), "\n";echo \Bitrix\Main\Config\Option::get('main', 'upload_dir'), "\n"; // каталог загрузок// предел размера файла и список разрешённых типов задают в настройках// главного модуля, а права пользователя на структуру - в настройках его группыПричины
-
Файл больше предела размера запроса примерно 30% случаев
ПризнакМелкие файлы загружаются, крупные обрываются или возвращают пустой ответ.
ПроверкаСравниваем размер файла с пределом запроса и пределом загружаемого файла у веб-версии языка.
Что делатьПоднимаем оба предела согласованно и не забываем про время выполнения: большой файл ещё и грузится дольше.
-
Нет прав на запись в каталог загрузок примерно 25% случаев
ПризнакНе загружается ничего и нигде, включая мелкие картинки в визуальном редакторе.
ПроверкаПроверяем владельца и права каталога загрузок от имени процессов сайта, а не от администратора.
Что делатьВыравниваем владельца каталога с пользователем процессов сайта; открывать права всем при этом не нужно.
-
Веб-сервер режет тело запроса примерно 20% случаев
ПризнакБраузер показывает ошибку сети, а в журнале сайта нет никаких записей.
ПроверкаЧитаем журнал ошибок веб-сервера в момент загрузки: превышение предела тела запроса видно там.
Что делатьПоднимаем предел размера тела запроса в настройках веб-сервера и перезапускаем его.
-
Тип файла запрещён настройками примерно 15% случаев
ПризнакОдни расширения загружаются, другие отклоняются с сообщением о недопустимом типе.
ПроверкаСмотрим список разрешённых типов в настройках продукта и правила проактивной защиты.
Что делатьДобавляем нужное расширение в список либо оставляем запрет: исполняемые типы держат закрытыми сознательно.
-
У пользователя нет прав на файловую структуру примерно 10% случаев
ПризнакУ администратора загрузка работает, у контент-менеджера кнопок загрузки нет вовсе.
ПроверкаПроверяем права группы пользователя на нужный каталог структуры и на медиабиблиотеку.
Что делатьВыдаём права на запись в конкретный каталог, а не на всю структуру сайта целиком.
Если ничего не помогло
Пробуем загрузить тот же файл в другом разделе админки. Если в одном месте получается, а в другом нет, дело в правах или в настройках конкретного поля, а не в сервере.
Смотрим на временный каталог языка. При нехватке места или неверном пути загрузка обрывается на середине, и сообщение об этом приходит только в журнал.
Проверяем, не мешает ли посредник перед сайтом. Балансировщик и защита от нагрузки тоже ограничивают размер запроса, и их пределы поднимают отдельно от пределов веб-сервера.
Частые вопросы
Какие пределы поднимать для загрузки больших файлов?
Предел размера файла, предел размера запроса и предел времени выполнения на стороне языка, а также предел тела запроса у веб-сервера. Поднимать один из них бессмысленно: сработает самый маленький.
Почему браузер показывает ошибку сети?
Так выглядит отказ веб-сервера, оборвавшего запрос по размеру тела. Платформа об этом не узнаёт, поэтому в её журнале записи нет, а в журнале веб-сервера она есть.
У администратора загружается, у менеджера нет.
Значит, дело в правах на файловую структуру или на медиабиблиотеку, а не в пределах сервера. Права выдают на конкретный каталог, а не на всю структуру сайта.
Можно ли разрешить загрузку любых типов файлов?
Технически да, но исполняемые типы держат запрещёнными сознательно: загруженный скрипт превращается в готовый вход на сайт. Нужное расширение добавляют точечно.
Куда смотреть, если загрузка обрывается на середине?
В место на диске, во временный каталог языка и в предел времени выполнения. Крупный файл требует и места под временную копию, и времени на приём.
Смежное
-
Файлы в проекте - оглавление подтемы
-
Файлы из кода: загрузка, хранение, удаление - как файл попадает в хранилище
-
Отдача файла с проверкой прав: закрытые каталоги, заголовки, ссылки - обратная задача
-
Права на файлы и папки: файловая система и права структуры - права на уровне сервера и структуры
-
Картинки товара: загрузка, размеры и вывод галереи - тот же отказ в карточке товара
-
Ядро D7 - устройство ядра целиком
-
Загрузка файла с формы: приём, проверки, прогресс, хранение - приём файла от посетителя сайта
-
Картинки не отображаются: разбор причин - когда файл загрузился, но не виден