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 以来这肯定不是一个问题。

乃至WordPress依赖于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

我已经忘记为什么那里有它了,所以我不确定我是否敢将其删除...但为什么它会产生这样的效果呢?

相关内容