Что может вызвать возврат JSON и HTML при POST-запросе к wp-admin/async-upload.php?

17 июл. 2015 г., 12:31:15
Просмотры: 25.3K
Голосов: 5

При загрузке корректного изображения во вкладке медиафайлов отображается "HTTP error".

При перезагрузке вкладки медиафайлов видно, что изображение загрузилось и изменило размер.

Инструменты отладки браузера показывают, что при загрузке браузер делает POST-запрос к wp-admin/async-upload.php. Сервер отвечает ошибкой 500. Однако тело ответа вызывает подозрения. Первая часть представляет собой JSON-структуру. Сразу за JSON-структурой следует HTML-документ с заголовком "WordPress Error", но с пустым телом.

В лог ошибок веб-сервера (apache) ничего не записывается, а режим отладки WordPress и повышенная детализация ошибок/предупреждений PHP не помогли. Отключение всех плагинов не повлияло на ошибку. Также пробовал переключаться между GD и ImageMagick без успеха.

Используемые версии программного обеспечения:

  • WordPress 4.2.2
  • PHP 5.5.12-2ubuntu4.4
  • Ubuntu Utopic

Есть ли идеи, что может заставить async-upload.php возвращать одновременно JSON и HTML-документ с ошибкой, и/или как можно дальше отлаживать эту проблему?

4
Комментарии

Вы решили эту проблему?

Nicolai Grossherr Nicolai Grossherr
28 июл. 2015 г. 11:00:26

Я попробовал все предложения, но без успеха. Мне кажется удивительным, что WP полностью формирует JSON-ответ, а затем выводит документ с ошибкой. Похоже, мне придется глубоко погрузиться в отладку WP, чтобы разобраться с этим.

astletron astletron
28 июл. 2015 г. 16:29:36

Жаль, я был почти уверен, что проход по списку решит проблему.

Nicolai Grossherr Nicolai Grossherr
28 июл. 2015 г. 17:08:02

Если любой из ответов был вам полезен, рассмотрите возможность его принятия. См. »Что делать, когда кто-то ответил на мой вопрос?« и/или »Почему важно голосовать?«. Дополнительная информация о модели [wordpress.se] доступна в [справке].

Nicolai Grossherr Nicolai Grossherr
9 нояб. 2015 г. 14:10:09
Все ответы на вопрос 6
0

У меня была такая же проблема, и в отладочном выводе я не нашел никакой информации.

Оказалось, что DOING_AJAX не был определен (не знаю, почему).

Изменение начала файла async-upload.php с

if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action'] ) {
    define( 'DOING_AJAX', true );
}

на

define( 'DOING_AJAX', true );

сработало для меня. Возможно, я позже разберусь глубже и найду настоящую причину проблемы.

3 мая 2018 г. 14:38:59
1

Скорее всего, это не проблема самого WordPress, а связано с настройками сервера. Ошибки 500 довольно общие и могут иметь различные причины, поэтому трудно дать одно универсальное решение. Кстати, возврат JSON и HTML в таких случаях — распространённое явление, хотя не совсем ясно, где именно происходит смешивание, возможно, здесь. Я почти уверен, что это связано с проблемами памяти.

Хотя проблема, вероятно, связана с памятью, я не могу быть на 100% уверен, так как недостаточно информации для точного определения. Поэтому вот небольшой, не исчерпывающий, список действий для проверки:

  • Лимит памяти — возможно, вашему PHP не хватает памяти, увеличьте его; добавьте define( 'WP_MEMORY_LIMIT', '128MB' ); в файл wp-config.php
  • .htaccess — повреждение/ошибка; проверьте его; возможно, сделайте резервную копию и пересоздайте
  • PHP5 — у некоторых хостингов были проблемы с этим, хотя я давно не сталкивался; попробуйте добавить AddType x-mapp-php5 .php в ваш .htaccess
  • Права доступа к файлам — убедитесь, что они установлены правильно; если не уверены, сбросьте их на корректные; статья в Codex: изменение прав доступа к файлам
  • Права доступа к папкам
    • WordPress — проверьте и при необходимости исправьте; статья в Codex: изменение прав доступа к файлам
    • Сервер — иногда возникают проблемы, например, с правами временной папки для загрузок
  • Перезагрузка основных файлов WordPress — хотя это не должно быть необходимо, если предыдущие шаги выполнены правильно, но иногда встречаются другие повреждения, так что это может быть дополнительным шагом
  • Настройка Apache — убедитесь, что Apache настроен корректно под ваши требования; частой причиной может быть модуль mod_security
  • Проверьте кастомный код WordPress — то, что вы написали или установили через плагины; стандартная процедура: тестируйте, отключая плагины и/или переключаясь на стандартную тему

Все пункты списка хорошо известны и задокументированы, поэтому при необходимости вы найдёте дополнительную информацию.

И последнее, но не менее важное — удачи!

21 июл. 2015 г. 12:14:27
Комментарии

Я смог исправить это, отключив mod_reqtimeout в Apache.

Bernhard Bernhard
16 авг. 2018 г. 09:13:54
0

В файле wp-config.php (в корневой папке WordPress) необходимо включить режим отладки.

Нужно установить параметр wp_debug в значение true.

Измените строку define('WP_DEBUG', false); на define('WP_DEBUG', true);

Сохраните файл и обновите страницу в браузере (рекомендую использовать комбинацию ctrl+f5).

После этого вы увидите все ошибки.

22 июл. 2015 г. 18:19:05
0

В моем случае (WP версии 5.0) это было связано с проблемой версии PHP (PHP v5.4). Переход на PHP v7.2 решил эту проблему.

13 дек. 2018 г. 00:07:35
0

Я рекомендую проверить журнал ошибок веб-сервера, прежде чем копаться наугад.

В моем случае я обнаружил следующее сообщение об ошибке:

2020/01/16 15:30:24 [error] 24844#24844: *206729 client intended to send too large body: 33962282 bytes, client: xxx.xxxx.xxx.xxx, server: example.com, request: "POST /wp-admin/async-upload.php HTTP/2.0", host: "example.com", referrer: "https://example.com/"

Это просто означает, что значение client_max_body_size в nginx было слишком маленьким. WordPress проверяет только параметр upload_max_filesize в конфигурации PHP, поэтому WordPress позволяет загружать файлы большего размера, чем client_max_body_size, если это значение меньше, чем upload_max_filesize.

16 янв. 2020 г. 16:41:05
0

Я решил эту проблему, увеличив post_max_size с 8 МБ до 16 МБ

16 июн. 2022 г. 05:21:54