- Статус
- Решено
Обзор проблемы
На некоторых сайтах может возникать следующая ошибка консоли 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
- Найдите и измените файл php.ini Вашего сервера.
- Найдите строку, содержащую always_populate_raw_post_data.
- Если строка начинается с точки с запятой (;), это означает, что она закомментирована (и не используется). В этом случае удалите точку с запятой.
- Убедитесь, что строка целиком выглядит как
always_populate_raw_post_data=-1(она должна заканчиваться на «=-1»). - Перезапустите Ваш сервер.
Переход на более новую версию PHP
Переход на более новую версию PHP (7.1 или выше) устранит предупреждение об устаревании.
PHP 7.1 работает намного быстрее, чем PHP 5.6.
Жизненный цикл PHP 5.6 завершился 1 января 2019 года. Это означает, что это «релиз, который больше не поддерживается. Пользователям этого релиза следует как можно скорее перейти на более новую версию, поскольку они могут подвергнуться риску из-за неисправленных уязвимостей в системе безопасности» (источник: https://www.php.net/supported-versions.php).