【问题标题】:How to force php to use `application/json` without using the explicit command?如何在不使用显式命令的情况下强制 php 使用`application/json`?
【发布时间】:2014-11-23 07:34:04
【问题描述】:

我们想创建某种 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

这是什么原因造成的?

【问题讨论】:

  • AddType application/json .json .php
  • @TheStatehz: 不起作用 :(.
  • 尝试 - AddType application/json .php - 这是语法。确保您的 .htaccess 文件也被使用。
  • @TheStatehz:也试过了(还有很多变化)。根据 Apache 文档,两者都是有效的。

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


【解决方案1】:

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

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

【讨论】:

  • AddType 是由 OP 添加的,所以我认为可以忽略。
  • 写php_value default_mimetype application/json就可以了
  • @Ivanzinho:是的,正确,但另外两行来自 OPs .httaccess
猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 2017-10-16
  • 2020-08-08
  • 2023-03-20
  • 1970-01-01
  • 2011-04-28
  • 2012-05-11
  • 2016-10-20
相关资源
最近更新 更多