2021-06-26

get_headers()関数を使用して特定URLのヘッダー情報を取得する

PHPに関する記事

HTTPリクエストに対するレスポンスの内容で、サーバーによって送出された全てのヘッダを取得します。

get_headers()関数の説明

get_headers(string $url, bool $associative = false, resource|null $context = null): array|false

get_headers()は、HTTPリクエストに対するレスポンス内でサーバーによって送られた内容を配列を返します。特定URLの存在確認、疎通確認で使用される関数です。

パラメータ

第1引数:url

取得対象となるURL。

第2引数:associative

associativeパラメータがゼロ以外の値にセットされた場合、get_headers()はレスポンスをパースし、配列のキーをセットします。詳しくはサンプルをご確認ください。

第3引数:context

stream_context_create()関数で作られた有効なコンテキストリソースが指定可能。

サンプルコード

例では、https://www.google.com/ のURLを指定

第2引数(associative)を指定しない場合

第2引数を指定しない、または0を指定します。

$headers = get_headers('https://www.google.com/');

echo '<pre>';
print_r($headers);
echo '</pre>';
Array
(
    [0] => HTTP/1.0 200 OK
    [1] => Date: Mon, 21 Jun 2021 02:22:04 GMT
    [2] => Expires: -1
    [3] => Cache-Control: private, max-age=0
    [4] => Content-Type: text/html; charset=ISO-8859-1
    [5] => P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
    [6] => Server: gws
    [7] => X-XSS-Protection: 0
    [8] => X-Frame-Options: SAMEORIGIN
    [9] => Set-Cookie: 1P_JAR=2021-06-21-02; expires=Wed, 21-Jul-2021 02:22:04 GMT; path=/; domain=.google.com; Secure
    [10] => Set-Cookie: NID=217=2-S_Z-D11PykJtBlLAVJQeqnBXuIEGb6rLd5c-WIZaCgJFNHWwdYmV2MD8aTjNGcxO1AyZ8zOanTbm4NWkCLSEenG3nvefyQwY5VhwB3IdCzM9JB7ofqYARJa4xubEShY223ymPTG8alHm8IjPGBX-mF6LCJ2qyOdhN9lMxMmpI; expires=Tue, 21-Dec-2021 02:22:04 GMT; path=/; domain=.google.com; HttpOnly
    [11] => Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
    [12] => Accept-Ranges: none
    [13] => Vary: Accept-Encoding
)

第2引数(associative)を指定する場合

第2引数を指定すると、レスポンスをパースし、配列のキーがセットされます。

$headers = get_headers('https://www.google.com/', 1);

echo '<pre>';
print_r($headers);
echo '</pre>';
Array
(
    [0] => HTTP/1.0 200 OK
    [Date] => Mon, 21 Jun 2021 02:22:04 GMT
    [Expires] => -1
    [Cache-Control] => private, max-age=0
    [Content-Type] => text/html; charset=ISO-8859-1
    [P3P] => CP="This is not a P3P policy! See g.co/p3phelp for more info."
    [Server] => gws
    [X-XSS-Protection] => 0
    [X-Frame-Options] => SAMEORIGIN
    [Set-Cookie] => Array
        (
            [0] => 1P_JAR=2021-06-21-02; expires=Wed, 21-Jul-2021 02:22:04 GMT; path=/; domain=.google.com; Secure
            [1] => NID=217=4S4kf_S8S7pBEkwqZw4aoGvGVBJhckoRNB64WmEXI0OOl-mW7H8qP6-Dl3zbx797pjN0qPgaUBICBPlZApLTTPt0kPWioL6KZB5J-k_rQNtZKi1uLY9DcRqs36owFy4Jt-vUOcELLFczrHBWatt0hr7vKI0O13ynYs1yheDeljA; expires=Tue, 21-Dec-2021 02:22:04 GMT; path=/; domain=.google.com; HttpOnly
        )

    [Alt-Svc] => h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
    [Accept-Ranges] => none
    [Vary] => Accept-Encoding
)

配列で取得できるので、ループで回して添え字を指定し、特定の要素を取りだすなどの使い方が可能です。