在 PHP 编程中,header() 函数是一个非常常用的工具,用来向客户端发送原始的 HTTP 头信息,例如设置重定向、指定内容类型、缓存控制等。然而,当我们把 PHP 脚本放在 模式下运行时,header() 函数还能发挥作用吗?本文将为你详细解答。
首先,我们需要理解什么是 PHP CLI 模式。CLI(Command Line Interface)就是通过命令行直接运行 PHP 脚本,而不是通过 Web 服务器(如 Apache、Nginx)去解析。通常我们在终端中输入:
php script.php
这种情况下,PHP 不再充当生成网页的工具,而只是一个普通的脚本执行器。
header() 函数的主要作用是向客户端(浏览器)发送 HTTP 头信息,比如:
header('Location: https://m66.net/welcome');
exit;
这段代码会告诉浏览器重定向到指定 URL。
但注意:header() 并不会输出实际内容,它只是修改响应头。换句话说,它的作用完全依赖于 PHP 和 Web 服务器之间的 HTTP 协议。
直接回答:不能用,或者说,用了也没意义。
原因如下:
CLI 模式下,PHP 直接将输出写到标准输出(stdout),没有 HTTP 协议、没有请求头,也没有响应头。
header() 函数在内部会检查是否运行在 SAPI(Server API)为 cli 的环境下,如果是,它调用时不会产生真正的 HTTP 头,也不会报错,但结果只是对 stdout 没有效果。
例如,运行以下代码:
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok']);
在 Web 环境中,浏览器会接收到 Content-Type 头并识别为 JSON。但在 CLI 下运行:
php script.php
你只会看到输出:
{"status":"ok"}
因为终端根本不理解或处理 HTTP 头。
总结一下:
? header() 在 CLI 下调用不会报错,但等同于无效操作。
? 不会有 HTTP 响应头被发送,因为 CLI 没有 HTTP 层。
? 可以继续使用 echo、print_r 等函数输出文本到终端。
如果你在编写 CLI 脚本时还调用了 header(),建议:
确认代码是否同时服务于 Web 和 CLI,如果是,最好加上 SAPI 检测: