%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82.png)
В моем PHP-файле есть этот код (не настоящий код, просто для демонстрационных целей):
ob_start();
var_export(headers_sent());
var_export(ob_get_status());
header('Content-Type: text/html');
header('Content-Type: application/json');
Но заголовки ответа в конечном итоге оказываются text/html
вместо application/json
. Насколько я понимаю, последний вызов header()
должен быть тем, что используется - тем более, headers_sent()
что возвращает false и ob_get_status()
также подтвердит, что буферизация вывода включена.
ВPHP-документацияхотя header()
в журнале изменений для версии 5.1.2 говорится следующее:
Теперь эта функция предотвращает отправку более одного заголовка одновременно в качестве защиты от атак с внедрением заголовков.
Хотя я не совсем уверен, что это значит, поскольку с момента выхода PHP 5.1.2 такой проблемы не возникало.
И дажеВордпрессполагается на header()
многократный вызов, например, в wp-admin/admin-ajax.php
, где он вызывается в самом начале файла @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
, а затем позже, когда он определил, что действие должно вернуть данные JSON, он вызывается @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
в .wp_send_json()
wp-includes/functions.php
Можно ли сделать изменение на сервере, чтобы PHP использовал последний заданный тип контента? Очевидно, что я не могу изменить файлы ядра Wordpress.
Я использую Debian 9.3, PHP 7.1.3, Apache 2.4.25.
Примечание сайта: Следствием этой проблемы является то, что медиатека не загружает изображения в режиме сетки, а индикатор активности просто продолжает вращаться.
!! ОБНОВЛЯТЬ !!
Теперь я узнал, что это происходит, потому что в моем .htaccess
файле есть следующее:
php_value output_handler mb_output_handler
Я забыл, зачем он у меня там, поэтому не уверен, что осмелюсь его удалить... Но почему он производит такой эффект?