来自 Web 服务器的非 HTML 输出

在某些情况下,使用 Web 服务器时,可能需要覆盖 Web 服务器的默认内容类型。例如,可能存在需要以 plain textJSONXML 发送数据的情况。

header() 功能可以发送原始 HTTP 标头。你可以添加 Content-Type 标头以通知浏览器我们发送的内容。

考虑以下代码,我们将 Content-Type 设置为 text/plain

header("Content-Type: text/plain");
echo "Hello World";

这将生成包含以下内容的纯文本文档:

Hello World

要生成 JSON 内容,请改用 application/json 内容类型:

header("Content-Type: application/json");

// Create a PHP data array.
$data = ["response" => "Hello World"];

// json_encode will convert it to a valid JSON string.
echo json_encode($data);

这将生成 application/json 类型的文档,其中包含以下内容:

{回复Hello World}

请注意,必须在 PHP 生成任何输出之前调用 header() 函数,否则 Web 服务器已经为响应发送了标头。因此,请考虑以下代码:

// Error: We cannot send any output before the headers
echo "Hello";

// All headers must be sent before ANY PHP output
header("Content-Type: text/plain");
echo "World";

这会产生警告:

警告: 不能更改头信息 -头已经发出(输出开始/dir/example.php:2)在 /dir/example.php 上线 3

使用 header() 时,其输出需要是从服务器发送的第一个字节。因此,在 PHP 开始标记 <?php 之前,在文件开头没有空行或空格很重要。出于同样的原因,从文件最末端的 PHP 代码块中省略 PHP 结束标记 ?> 被认为是最佳实践(参见 PSR-2 )。

查看输出缓冲部分 ,了解如何将内容捕获到变量中以便稍后输出,例如,在输出标题后。