PHP: HTTP レスポンス コードを送信するにはどうすればいいですか? 質問する

PHP: HTTP レスポンス コードを送信するにはどうすればいいですか? 質問する

HTTP 200 OK や 4XX または 5XX コードなどの HTTP 応答コード (ステータス コード) を使用して応答する必要がある PHP スクリプトがあります。

PHP でこれを実行するにはどうすればよいですか?

ベストアンサー1

私はこの質問を見つけたのですが、もっと包括的な回答が必要だと思いました:

PHP 5.4では、これを実現するには 3 つの方法があります。

応答コードを独自に組み立てる (PHP >= 4.0)

header()この関数には、HTTPレスポンス行を検出し、それをカスタムレスポンス行に置き換える特別なユースケースがあります。

header("HTTP/1.1 200 OK");

ただし、(高速)CGI PHP の場合は特別な処理が必要です。

$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi')
    header("Status: 404 Not Found");
else
    header("HTTP/1.1 404 Not Found");

:HTTP RFC理由フレーズには任意のカスタム文字列(標準に準拠)を使用できますが、クライアントの互換性のために、そこにランダムな文字列を配置することはお勧めしません。

注記: php_sapi_name()PHP 4.0.1 が必要です

ヘッダー関数の 3 番目の引数 (PHP >= 4.3)

最初のバリアントを使用する場合、明らかにいくつかの問題があります。最大の問題は、PHP または Web サーバーによって部分的に解析され、ドキュメントが不十分であることだと考えています。

4.3 以降、このheader関数には 3 番目の引数があり、応答コードをある程度簡単に設定できますが、これを使用するには最初の引数が空でない文字列である必要があります。次の 2 つのオプションがあります。

header(':', true, 404);
header('X-PHP-Response-Code: 404', true, 404);

私は 2 番目の方法をお勧めします。最初の方法は、私がテストしたすべてのブラウザーで動作しますが、一部のマイナーなブラウザーや Web クローラーでは、コロンのみを含むヘッダー行で問題が発生する可能性があります。2 番目の方法のヘッダー フィールド名は、もちろん標準化されておらず、変更される可能性がありますが、私は説明的な名前を選択しました。

http_response_code 関数 (PHP >= 5.4)

http_response_code()この関数は PHP 5.4 で導入され、作業がかなり簡単になりました。

http_response_code(404);

それだけです。

互換性

これは、5.4 より前のバージョンとの互換性が必要で、「新しい」機能も必要だったときに私が考案した関数ですhttp_response_code。PHP 4.3 は下位互換性が十分すぎるほどあると思いますが、どうなるかはわかりません...

// For 4.3.0 <= PHP <= 5.4.0
if (!function_exists('http_response_code'))
{
    function http_response_code($newcode = NULL)
    {
        static $code = 200;
        if($newcode !== NULL)
        {
            header('X-PHP-Response-Code: '.$newcode, true, $newcode);
            if(!headers_sent())
                $code = $newcode;
        }       
        return $code;
    }
}

おすすめ記事