HTTP と HTTPS
PHP 3, PHP 4, PHP 5。https:// は PHP 4.3.0以降。
- https://example.com
- https://example.com/file.php?var1=val1&var2=val2
- https://user:password@example.com
- https://example.com
- https://example.com/file.php?var1=val1&var2=val2
- https://user:password@example.com
HTTP 1.0 により HTTP GET メソッドを用いてファイル/リソースに読み込みのみの アクセスが可能です。仮想ホストにホスト名でアクセスするために、 Host: ヘッダが送信されます。 ini ファイルまたはストリームコンテキストによって user_agent 文字列を設定している場合、 それはリクエストの中にも含まれます。
IIS のような、いくつかの標準に 対応してない Web サーバは、PHP に警告を発生させるような手順でデータを送信します。 このようなサーバを使用する場合は、 error_reporting を警告を発生しないレベルまで小さくする必要があります。 PHP 4.3.7 以降では、https:// ラッパーでストリームをオープンする際に バグがある IIS サーバソフトウエアを検出することができ、この警告を抑制することができます。 あなたが ssl:// ソケットを作性するために fsockopen() を使用している場合、 自らこの警告を検出し、抑制する必要があります。
PHP 4.0.5 以降、リダイレクトがサポートされています。これ以前のバージョンを 使用している場合、URL の末尾にスラッシュを付ける必要があります。 (全てのリダイレクトが処理された後に)ドキュメント取得元のリソースの URL を知ることが 重要な場合、ストリームから返された一連のレスポンスヘッダを処理する必要があります。
<?php
$url = 'https://www.example.com/redirecting_page.php';
$fp = fopen($url, 'r');
/* PHP 4.3.0 の場合、stream_get_meta_data() の代わりに
$http_response_header を使用してください */
$meta_data = stream_get_meta_data($fp);
foreach($meta_data['wrapper_data'] as $response) {
/* リダイレクトされているか? */
if (substr(strtolower($response), 0, 10) == 'location: ') {
/* $url をリダイレクト先に書き換える */
$url = substr($response, 18);
}
}
?>
Example#1 ページの取得および POST データの送信
<?php
$postdata = http_build_query(
array(
'var1' => 'some content',
'var2' => 'doh'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://example.com/submit.php', false, $context);
?>
ストリームにより、リソースの body にアクセスすることが できます。ヘッダは、$http_response_header 変数に保存されます。 PHP 4.3.0 以降は、ヘッダは stream_get_meta_data() により取得できます。
HTTP 接続は読み込みのみ可で、HTTP リソースにデータを書き込んだり ファイルをコピーしたりすることはできません。
注意: HTTPS は、PHP 4.3.0 以降で OpenSSL のサポートを組み込んだ場合にサポートされます。
属性 | サポートの可否 |
---|---|
allow_url_fopen で制約される | Yes |
読み込み可 | Yes |
書き込み可 | No |
追記可能 | No |
同時読み書き可 | N/A |
stat() をサポート | No |
unlink() をサポート | No |
rename() をサポート | No |
mkdir() をサポート | No |
rmdir() をサポート | No |
名前 | 使用法 | デフォルト |
---|---|---|
method | リモートサーバでサポートされる GET、 POST あるいはその他の HTTP メソッド。 | GET |
header | リクエストに付加されるヘッダ。ここで指定した値が (User-agent:、Host:、 および Authentication: などの)他の値を 上書きすることもあります。 | |
user_agent | User-Agent: ヘッダとして送信する値。上で説明した header オプションで user-agent が 定義されていない場合のみ使用されます。 | php.ini での user_agent の設定 |
content | ヘッダの後に送信する追加データ。通常、POST または PUT リクエストの際に使用されます。 | |
proxy | プロキシサーバを示す URI(例: tcp://proxy.example.com:5100)。 (HTTP プロキシを使用した)HTTPS のプロキシ処理は、 PHP 5.1.0 以降でのみ動作します。 | |
request_fulluri | TRUE を指定すると、リクエストを生成する際に完全な URI (GET https://www.example.com/path/to/file.html HTTP/1.0) が用いられます。これは標準のリクエストフォーマットではありませんが、 このようなフォーマットを要求するプロキシサーバも存在します。 | FALSE |
max_redirects | リダイレクトをたどる最大数。値が 1 以下の場合は リダイレクトをたどらないことを意味します。 PHP 5.1.0 で追加されました。 | 20 |
protocol_version | HTTP プロトコルのバージョン。PHP 5.1.0 で追加されました。 | 1.0 |
timeout | 読み込みタイムアウト秒数を float (例 10.5) で指定します。PHP 5.2.1 で追加されました。 | default_socket_timeout |
注意: 基盤となるソケットストリームのコンテキストオプション これ以外のコンテキストオプションが 基盤となるトランスポート でサポートされています。 https:// ストリームの場合は、tcp:// のコンテキストオプションを参照ください。 https:// ストリームの場合は、ssl:// のコンテキストオプションを参照ください。
バージョン 5 より前では、HTTP リクエストで独自のヘッダを送信することができます。 これは INI 設定項目 user_agent を処理する際の副作用によるものです。 user_agent に何らかの正常な文字列 (たとえばデフォルト設定の PHP/version など) を指定し、さらに続けて キャリッジリターン(\r) / ラインフィード(\n) を置いた後に任意のヘッダを記述します。 この方法は、PHP 4 以降のバージョンで動作します。
Example#2 HTTP リクエストで独自のヘッダを送信する
<?php
ini_set('user_agent', "PHP\r\nX-MyCustomHeader: Foo");
$fp = fopen('https://www.example.com/index.php', 'r');
?>
送信されるリクエストは次のようになります。
GET /index.php HTTP/1.0 Host: www.example.com User-Agent: PHP X-MyCustomHeader: Foo