前に file_get_contents() 関数を使ったネタを書きましたが 社内などでプロキシを経由している場合は エラーになってしまいます。
プロキシの接続情報を含め、追加情報を設定するには 第 3 引数にコンテキストを設定します。
echo file_get_contents('http://www.yahoo.co.jp/', FALSE, $context);
コンテキストを作成するには stream_context_create() 関数を使います。
[参考]
PHP: stream_context_create - Manual
HTTP の場合次のようにすると POST 送信になります。
$context = stream_context_create( array( "http" => array( "method" => "POST", ) ));
設定できるパラメータはマニュアルを参照してください。
[参考]
PHP: コンテキストオプションとパラメータ - Manual
プロキシの設定は次のように tcp://host:port で指定します。
$context = stream_context_create( array( "http" => array( "proxy" => "tcp://192.168.1.200:3128", "request_fulluri" => TRUE, ) ));
プロキシ経由の場合 request_fulluri も指定します。
プロキシにユーザ認証がある場合ですが ネットで検索したら proxy_user, proxy_pass を設定するとありました。
$context = stream_context_create( array( "http" => array( "proxy" => "tcp://192.168.1.200:3128", "request_fulluri" => TRUE, "proxy_user" => "xxxxx", "proxy_pass" => "yyyyy", ) ));
[参考]
プロキシ経由でfile_get_contents - Road To Nowhere
ただ、この方法では自分の環境では認証エラーになってしまいました。 仕方ないので 次のように プロキシ用のヘッダを生成して使用しています。 自分の環境のプロキシは Basic schema なので Base64 でエンコードするだけです。
$url = "http://www.google.co.jp/"; $proxy_host = "192.168.1.200"; $proxy_port = "3128"; $proxy_user = "xxxxx"; $proxy_pass = "yyyyy"; $proxy_auth = base64_encode("$proxy_user:$proxy_pass"); $context = stream_context_create( array( "http" => array( "proxy" => "tcp://$proxy_host:$proxy_port", "header" => "Proxy-Authorization: Basic $proxy_auth", "request_fulluri" => TRUE, ) )); echo file_get_contents($url, FALSE, $context);
PHP の変数は大文字・小文字を区別します。
ところが予約語は、大文字・小文字の区別がありません。
次のようなスクリプトを記述します。
echo 命令が大文字・小文字の 2 パターンあります。
$a = "small"; $A = "large"; echo $a; ECHO $a; echo $A; ECHO $A;
結果は次のようになります。
変数だけ大文字・小文字が区別されています。
small small large large
関数(自作含む)なども大文字・小文字の区別はされません。
クラスの場合 メソッドは区別なしで、変数は区別ありとなります。
class Test { var $v1 = "abc"; function f1() { return $this->v1; } } $t = new Test(); echo $t->f1(); echo $t->F1(); echo $t->v1; echo $t->V1; // この行だけエラー