Работаем с WordPress : HTTP error при загрузке файлов

Help for Wordpress

Возникновение ошибки «HTTP error» при работе в WordPress может быть вызвано целым рядом причин. Перечислю лишь те, с которыми сталкивался сам, и те эффективные решения, которые были опробованы мной. Я не буду разжевывать все в виде подробного мануала для совсем начинающих веб-мастеров. Рассчитываю на более подготовленного читателя и самого себя, для которого публикую эту серию постов по администрированию WordPress в качестве блокнота на случай внезапно посетившего меня склероза.) В сети полно специализированных ресурсов, где вам все подробно разжуют и распишут в деталях. Я такой задачи себе не ставил. Итак…

Я в своей практике я привык пользовать linux в виде Centos в качестве системной платформы своего web-сервера, поэтому указанные пути и директории расположение конфигурационных файлов применительны именно к этой системе. Не брезгую я менять настройки и через активно пользуемую мной панель управления сервером ISP manager.

В первую очередь, при возникновении такой ошибки наиболее разумно будет посмотреть log ошибок web-сервера. Ищем свежие строчки, в которых упоминаются PUT, GET и POST запросы и читаем их внимательно. Как правило это дает направление, в котором нужно искать решение.

Наиболее частые причины ошибки HTTP (возможна и их комбинация)…

Разрешение загружаемого фото больше допустимого

На собственном опыте заметил, что ошибка может возникать, если ширина загружаемого фото превышает величину, указанную в качестве ширины для формата изображения «Крупный размер» («Large size») в «Настройки — Медиафайлы». Меняем на меньший и пробуем. Я лично для себя выбрал максимальный достаточный размер для публикуемых фото — 1280х720px. Если вы используете свой WordPress для создания фотопортфолио, то тут уже надо исходить из собственных требований к качеству публикуемого фотоматериала.

Следует помнить, что создание копий изображений в разных разрешениях происходит на этапе загрузки файла. Поэтому при изменении предустановленных размеров, пользуйтесь плагинами для regenerate thumbnails (пересоздания миниатюр).

Возможно в моей практике данная причина возникновения http error  не была единственной, а шла вкупе с более известными и привычными.

Объем загружаемого файла больше допустимого в настройках PHP

Стандартная история. Тут вариантов решения много…

Если хостинг позволяет вносить правки в php.ini, то ищем в нем две директивы и меняем их значение на подходящее, например 32Мб:

upload_max_filesize = 32M
post_max_size = 32M

Второй параметр определяет максимальный размер POST-запросов, который должен быть равен или быть больше максимального размера файлов.

Не забываем перегрузить web-сервер Apache через панель или SSH командой:

service httpd restart

Если доступа к php.ini нет, пробуем то же самое прописать через .htaccess в корне вашего WordPress:

php_value upload_max_filesize 32M
php_value post_max_size 32M

Если вы пользуете в качестве web-сервера на Apache, а Nginx, то насколько я помню nginx не понимает .htaccess, но поменять настройки PHP можно через конфигурационный файл nginx.conf. Если PHP настроен как FastCGI клиент, то это делается через директиву fastcgi_param:

fastcgi_param PHP_VALUE upload_max_filesize=32M;
fastcgi_param PHP_VALUE post_max_size=32M;

Также не лишним будет проверить значение nginx-директивы client_max_body_size, отвечающей за максимальный размер данных передаваемых в HTTP запросах. Она тоже влияет на максимальный размер загружаемых файлов.Оно должно быть не меньше вышеуказанных параметров.

Не забываем после внесения изменений в конфигурационные файлы nginx или Apache перезагрузить службу через панель управления или через SSH командами типа:

service nginx restart
service httpd restart

Ну и последний вариант — попробовать расширить возможности PHP непосредственно из конфигурационного файла вашего WordPress с помощью функции ini_set():

ini_set( 'upload_max_size', '32M' );
ini_set( 'post_max_size', '32M');

В WordPress есть специальный фильтр upload_size_limit используемый в функции wp_max_upload_size().

Этот фильтр отвечает за максимальный размер загружаемых файлов. Значение по умолчанию — наименьшее из upload_max_filesize и post_max_size из файла php.ini, и использовать данный фильтр, можно только в пределах этого значения.

Если вы увеличили размер загружаемых файлов описанными выше способами, а WordPress вам до сих пор показывает значение меньше, чем выставленное, то проверьте, возможно у вас установлен плагин, который использует этот фильтр. Код этого плагина можно либо подправить, либо найти ему замену, либо деактивировать его.

Уменьшить максимальный размер загружаемых файлов можно через фильтр в functions.php вашей темы:

add_filter( 'upload_size_limit', '16M' );

Ошибка client intended to send too large body

Если в логах nginx ( /var/log/nginx/error.log ) мы видим ошибку типа:

[error] XXXX#0: *XXXXXXXXXX client intended to send too large body: XXXXXXX bytes, client: XX.XXX.XXX.XX, server: XXXXX, request: «POST /engine/ajax/upload.php HTTP/1.1», host: «XXX.com»

то это верный признак того, что надо увеличить значение директивы client_max_body_size в конфигурационном файле nginx.conf в блоке http {}.

Делаем это через панель управления или через SSH и редактор VI например:

# vi /etc/nginx/nginx.conf
client_max_body_size 100M;
# service nginx reload

Выход из редактора VI осуществляется командами :wq с сохранением содержимого или :q (:q!) без сохранения.

Директива client_max_body_size задаёт максимально допустимый размер тела запроса клиента, указываемый в поле “Content-Length” заголовка запроса. Если размер больше заданного, то клиенту возвращается ошибка 413 (Request Entity Too Large). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. Установка параметра размер в 0 отключает проверку размера тела запроса клиента.

Еще варианты борьбы с http error через .htaccess

Вставляем в конец .htaccess файла следующий код:

<IfModule mod_security.c>
 <Files async-upload.php>
 SecFilterEngine Off
 SecFilterScanPOST Off
 </Files>
</IfModule>

Мне сложно объяснить сакральный смысл данного кода, но иногда помогает.

Также лично на своем опыте убедился в действенности еще одной волшебной директивы, которую надо вставить в самое начало .htaccess:

SetEnv MAGICK_THREAD_LIMIT 1

В моей практике это однажды решило проблему, когда ошибка http вылетала при попытке загрузить файл более 1Мб, несмотря на все прописанные гораздо большие максимально допустимые объемы загружаемого файлов и команды способами описанными

Конфликт плагинов

Если эта ошибка появилась неожиданно, т.е. вы не производили серьезного обновления ядра или темы,  то вспоминайте какой из плагинов вы недавно устанавливали или обновляли. Возможно причина в нем. Единственный вариант в этом случае — это последовательное аккуратное отключение недавно установленных и проверка на присутствие этой самой ошибки.

На этом пожалуй это все, что мне пришло на память из свое практики. Наверное есть что-то еще, если вспомню, то добавлю в этот пост, но в большинстве случаев вышеописанных танцев с бубном вокруг вашего Вордпресс в борьбе с ошибкой http при загрузке файлов, как правило хватает.

 

2 комментария
Share:

2 Comments

  1. Похоже, что я поторопилась радоваться… стала кучей закидывать фото…иии… загрузилось только одно.. и опять все по-новой (((

Комментировать в блоге