プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、get_headers()は、初期状態ではHEADメソッドではなくGETメソッドでアクセスするみたい
言いたいことはすべてタイトルに書いてしまいましたが、
PHPの「get_headers()」はデフォルトではGETメソッドでアクセスするらしいです。

マジかよ<( ̄◇ ̄;)>

「get_headers()」は、その名の通りHTTPアクセスしてヘッダ情報を取得する関数です。
だから今まで、HEADメソッドでアクセスしているものだと勝手に思い込んでいました。

ところが

HEADメソッドによるHTTPアクセスに対して404エラーを返す

の記事で書いた対応の動作確認のために、こんなプログラムを作ったのですがφ(--)

<?php

$header = get_headers("http://example.com/");
var_dump($header);

一向に404が返ってこなくてですね。
200ばっかり返ってきてキレ気味になっていたのです。

なんでHEADメソッドでアクセスしてるのに404が返らないんだよ!(#T皿T)ノミ☆ガンガン

サーバ側のログを見たら、こんなんなってましたφ(--)

198.51.100.0 - - [18/Apr/2015:12:21:12 +0900] "GET / HTTP/1.0" 200 198 "-" "-"

……GETでアクセスしてるじゃん(--;

慌てて「get_headers()」の仕様を確認したところ、バージョン5.1.3の変更履歴に

この関数はデフォルトのストリームコンテキストを使用します。 これは、stream_context_set_default() 関数を使用して設定/変更することが可能です。

とか書いてありました。
そんでもって、デフォルトはGETみたいです。

ついでに、HEADでアクセスしたければ

stream_context_set_default(
    array(
        'http' => array(
            'method' => 'HEAD'
        )
    )
);

をつけなさい、とも書いてありました。
あっ、そーですか(^^ゞ

結局、もともとのコードを

<?php
stream_context_set_default(
    array(
        'http' => array(
            'method' => 'HEAD'
        )
    )
);


$header = get_headers("http://example.com/");
var_dump($header);

に変更して実行したら、ちゃんとHEADでのアクセスになりました。

なるほど。
なんでデフォルトはHEADじゃなくてGETなんですかね(--?

まぁ、良いや。

取りあえず、そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事