如何在不使用显式命令的情况下强制php使用“application/json”


How to force php to use `application/json` without using the explicit command?

我们想要创建某种api,其中使用.php文件生成json格式的结果。

web文件夹看起来像

api
├── .htaccess
└── foo
    ├── bar.php
    └── baz.php

其中bar.phpbaz.php是生成json格式的查询回复的php文件。

这样的文件(bar.php)看起来像:

<?php
include_once("../../utils.php");
$id = $_GET['id'];
echo json_encode(some_function($id));
?>

当然,应该指定一个标头header("Content-type: application/json");。然而,我们希望将.htaccess设置为这样做,这样就永远不会忘记设置内容类型,如果需要额外的头,我们可以很容易地修改它,等等。我们不希望在每个文件中都写入header(...)

.htaccess看起来像:

#All php files return JSON formatted text.
AddType application/json json php

但是生成的结果仍然是mime类型:text/html

是什么原因造成的?

PHP有一些值,包括default_mimetype。当Apache服务器生成.php页面时,它首先设置application/jsonmime类型,但当PHP引擎启动时,头被修改回text/html。您可以通过向.htaccess:添加附加规则来设置此项

#All php files return JSON formatted text.
AddType application/json json php
php_value default_mimetype application/json