2009.04.09 Thursday
file_get_contents で外部リソースにアクセスする 〜VirtualHost編〜
久々な記事の割には小ネタです。
PHP で他のサーバにあるリソースを HTTP経由でアクセスする場合はいくつか方法があります。- fsockopen でソケットを張って通信する
- PEAR::HTTP_Request をつかう
- cURL関数をつかう
- wget等の外部プロセスを実行する
・・・という時は file関数や file_get_contents関数でサクっとアクセスするのが便利です。
(allow_url_fopen が有効になっていることが前提)
セキュリティ的には色々物議を醸していますけどね。
file_get_contents('http://hoge.example.com/path/to/resource');
で目的が果たせればいいのですが, Webサーバによっては VirtualHost の設定がされていて,
目的のリソースの URI が http://fuga.example.com/path/to/resource の場合もありますよね。
Name-based な VirtualHost だと, hoge.example.com と fuga.example.com は同じ IPアドレスを指すので,
file_get_contents('http://fuga.example.com/path/to/resource');
だと, Hostヘッダを付加しないので VirtualHost の設定によっては意図するリソースにアクセスできない可能性があります。
# どの VirtualHost の設定を使うかは Hostヘッダで判断するので
Hostヘッダを付加するにはどうすればいいか, ですが...










