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/htmlapplication/json.根據我的理解,最後一次呼叫應該header()是所使用的 - 特別是因為headers_sent()返回 false 並且ob_get_status()還將確認輸出緩衝已開啟。

PHP 文件因為header()它在 5.1.2 版本的更新日誌中說了這樣的聲明:

此功能現在可以防止一次發送多個標頭,以防止標頭注入攻擊。

但我不太確定這意味著什麼 - 因為自 PHP 5.1.2 以來這肯定不是一個問題。

乃至WordPress依賴header()多次調用,例如。在wp-admin/admin-ajax.php檔案開頭呼叫的地方@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );,然後當它確定該操作需要傳回它@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );wp_send_json()in中呼叫的 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

我已經忘記了為什麼會有這個東西,所以我不確定我是否敢把它去掉……但是為什麼它會有這樣的效果呢?

相關內容