はじめに
PHP上級試験対策をしていると、ファイル操作関数に URL を渡した場合の挙動が問われることがあります。一見「ローカルファイルに書き込み/読み込みを行うだけ」と思いがちですが、実は HTTP ストリームラッパー が働いて少し特殊な動きをします。
今回は模擬試験コードをもとに、この挙動を整理してみます。
目次
サンプルコード
<?php
declare(strict_types=1);
error_reporting(-1);
$url = 'http://example.com/sample.txt';
file_put_contents($url,'exam text');
var_dump(file_get_contents($url));
コードの意味
file_put_contents($url, ‘exam text’);
通常はローカルファイルへ書き込みますが、URLを指定すると HTTP PUT リクエスト が送信されます。
ただし多くのサーバーでは PUT を受け付けないため、ほとんどの場合は警告が発生して失敗します。
file_get_contents($url);
URLを指定した場合は HTTP GET リクエスト でデータを取得します。
ここでは http://example.com/sample.txt
にアクセスしますが、そのファイルが存在しないため、戻り値は false となります。
実際の出力例
Warning: file_put_contents(http://example.com/sample.txt): failed to open stream: ...
bool(false)
まとめ
file_get_contents("http://...")
は GETリクエストで取得可能file_put_contents("http://...")
は PUTリクエストを試みるが、通常は失敗- 本コードでは警告が出て、結果は
bool(false)
試験対策として「URLを指定した場合はHTTPリクエスト扱いになる」ことを覚えておくと安心です。