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