如何强制php使用`application / json`而不使用显式命令?

时间:2014-09-29 00:14:09

标签: php json .htaccess http-headers mime-types

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

网络文件夹看起来像

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

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

此类文件(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-type:text/html

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:2)

PHP有一些值,包括default_mimetype。当Apache服务器生成.php页面时,它首先设置application/json mime-type,但是当PHP引擎启动时,标题会被修改回text/html。您可以通过向.htaccess添加其他规则来设置此项:

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