PHP/Apache: header() の複数呼び出しが機能しない

PHP/Apache: header() の複数呼び出しが機能しない

私の 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

なぜそれをそこに入れたのか忘れてしまったので、それを削除できるかどうかはわかりません... しかし、なぜそれがそのような効果があるのでしょうか?

関連情報