WPML
Статус
Решено

Обзор проблемы

На некоторых сайтах может возникать следующая ошибка консоли JavaScript на страницах «Панель управления» или «Задания на перевод» раздела «Управление переводами»:

app.js?ver=5.0.4:1 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

Эта ошибка также вызывает ряд предупреждений PHP, подобных следующим:

PHP Warning: Cannot modify header information - headers already sent in /app/public/wp-includes/rest-api/class-wp-rest-server.php on line 1258

PHP Stack trace:

PHP 1. {main}() /app/public/index.php:0

PHP 2. require() /app/public/index.php:17

PHP 3. wp() /app/public/wp-blog-header.php:16

PHP 4. WP->main() /app/public/wp-includes/functions.php:1105

PHP 5. WP->parse_request() /app/public/wp-includes/class-wp.php:737

PHP 6. do_action_ref_array() /app/public/wp-includes/class-wp.php:387

PHP 7. WP_Hook->do_action() /app/public/wp-includes/plugin.php:531

PHP 8. WP_Hook->apply_filters() /app/public/wp-includes/class-wp-hook.php:310

PHP 9. call_user_func_array:{/app/public/wp-includes/class-wp-hook.php:286}() /app/public/wp-includes/class-wp-hook.php:286

PHP 10. rest_api_loaded() /app/public/wp-includes/class-wp-hook.php:286

PHP 11. WP_REST_Server->serve_request() /app/public/wp-includes/rest-api.php:309

PHP 12. WP_REST_Server->send_header() /app/public/wp-includes/rest-api/class-wp-rest-server.php:224

PHP 13. header() /app/public/wp-includes/rest-api/class-wp-rest-server.php:1258

Эта ошибка характерна для сайтов, работающих на PHP 5.6, и вызвана предупреждением об устаревании, которое генерирует PHP при заполнении глобальной переменной $HTTP_RAW_POST_DATA (даже если она не используется), как объяснил автор этого изменения в PHP:

[…] текущий способ вызова сообщения об устаревании не совсем оптимален (мы не показываем сообщение при попытке обращения к переменной $HTTP_RAW_POST_DATA, а делаем это при заполнении $HTTP_RAW_POST_DATA.

В предупреждении объясняется, как убрать это уведомление об устаревании.

Обходное решение

Изменение файла php.ini


  1. Найдите и измените файл php.ini Вашего сервера.

  2. Найдите строку, содержащую always_populate_raw_post_data.

  3. Если строка начинается с точки с запятой (;), это означает, что она закомментирована (и не используется). В этом случае удалите точку с запятой.

  4. Убедитесь, что строка целиком выглядит как always_populate_raw_post_data=-1 (она должна заканчиваться на «=-1»).

  5. Перезапустите Ваш сервер.

Переход на более новую версию PHP


Переход на более новую версию PHP (7.1 или выше) устранит предупреждение об устаревании.

PHP 7.1 работает намного быстрее, чем PHP 5.6.

Жизненный цикл PHP 5.6 завершился 1 января 2019 года. Это означает, что это «релиз, который больше не поддерживается. Пользователям этого релиза следует как можно скорее перейти на более новую версию, поскольку они могут подвергнуться риску из-за неисправленных уязвимостей в системе безопасности» (источник: https://www.php.net/supported-versions.php).

Все известные проблемы →