PHPプログラミングでは、 Header()関数は、リダイレクトの設定、コンテンツタイプ、キャッシュコントロールなどの指定など、RAW HTTPヘッダー情報をクライアントに送信するために使用される非常に一般的なツールです。ただし、 Header()関数はモードでPHPスクリプトを実行するときも機能しますか?この記事では、詳細な回答をご覧ください。
まず、PHP CLIパターンが何であるかを理解する必要があります。 CLI(コマンドラインインターフェイス)は、Webサーバー(ApacheやNginxなど)を介してそれらを解析するのではなく、コマンドラインを介して直接PHPスクリプトを実行することです。通常、入力します。
php script.php
この場合、PHPはWebページを生成するためのツールとして機能するのではなく、単なる通常のスクリプトエグゼキューターです。
Header()関数の主な機能は、次のようなHTTPヘッダー情報をクライアント(ブラウザ)に送信することです。
header('Location: https://m66.net/welcome');
exit;
このコードは、ブラウザに指定されたURLにリダイレクトするように指示します。
ただし、 Header()は実際のコンテンツを出力せず、応答ヘッダーを変更するだけです。言い換えれば、その役割は、PHPとWebサーバーの間のHTTPプロトコルに完全に依存しています。
直接回答:使用できません。または、使用しても意味がありません。
理由は次のとおりです。
CLIモードでは、PHPは、HTTPプロトコルなし、要求ヘッダー、応答ヘッダーなしで、出力を標準出力(STDOUT)に直接書き込みます。
Header()関数は、SAPI(サーバーAPI) CLIを使用して環境で実行されているかどうかを内部的にチェックします。もしそうなら、呼び出し時に実際のHTTPヘッダーを生成せず、エラーを報告しませんが、結果はSTDOUTに影響を与えないということです。
たとえば、次のコードを実行します。
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok']);
Web環境では、ブラウザはコンテンツタイプのヘッダーを受信し、JSONとして認識します。しかし、CLIの下で走ります:
php script.php
出力のみが表示されます。
{"status":"ok"}
端末はHTTPヘッダーをまったく理解または処理していないためです。
要約するには:
? CLIの下でHeader()への呼び出しはエラーを報告しませんが、無効な操作に相当します。
? CLIにHTTPレイヤーがないため、HTTP応答ヘッダーは送信されません。
? Echo 、 print_r 、その他の機能を使用して、テキストを端末に出力し続けることができます。
CLIスクリプトを書くときにHeader()も呼び出す場合は、推奨されます。
コードがWebとCLIの両方を提供するかどうかを確認します。もしそうなら、SAPI検出を追加するのが最善です。