當前位置: 首頁> 最新文章列表> PHP CLI 模式中header() 的作用與限制

PHP CLI 模式中header() 的作用與限制

M66 2025-05-30

在PHP 編程中, header()函數是一個非常常用的工具,用來向客戶端發送原始的HTTP 頭信息,例如設置重定向、指定內容類型、緩存控制等。然而,當我們把PHP 腳本放在模式下運行時, header()函數還能發揮作用嗎?本文將為你詳細解答。

什麼是PHP CLI 模式?

首先,我們需要理解什麼是PHP CLI 模式。 CLI(Command Line Interface)就是通過命令行直接運行PHP 腳本,而不是通過Web 服務器(如Apache、Nginx)去解析。通常我們在終端中輸入:

 php script.php

這種情況下,PHP 不再充當生成網頁的工具,而只是一個普通的腳本執行器。

header() 函數的作用

header()函數的主要作用是向客戶端(瀏覽器)發送HTTP 頭信息,比如:

 header('Location: https://m66.net/welcome');
exit;

這段代碼會告訴瀏覽器重定向到指定URL。

但注意: header() 並不會輸出實際內容,它只是修改響應頭。換句話說,它的作用完全依賴於PHP 和Web 服務器之間的HTTP 協議。

CLI 模式下還能用header() 嗎?

直接回答:不能用,或者說,用了也沒意義

原因如下:

  • 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 頭。

CLI 模式下的限制和建議

總結一下:
? header()在CLI 下調用不會報錯,但等同於無效操作。
? 不會有HTTP 響應頭被發送,因為CLI 沒有HTTP 層。
? 可以繼續使用echoprint_r等函數輸出文本到終端。

如果你在編寫CLI 腳本時還調用了header() ,建議:

  • 確認代碼是否同時服務於Web 和CLI,如果是,最好加上SAPI 檢測: