Contents
file://でローカルファイルにアクセス
ローカルファイルシステムにアクセスするためのラッパです
file:///var/www/html/index.php のような形で指定可能できます。
省略形として単に /var/www/html/index.php としてもOK(デフォルトが file:// なので省略可)
<?php
// 対象のファイルパス。file://を明示的につける
$filePath = 'file:///path/to/test.txt';
// fopen()でファイルを開く
$handle = fopen($filePath, 'r');
if ($handle === false) {
die('ファイルを開けませんでした。');
}
php://input とは
php://input はHTTPリクエストのボディ部分(生のデータ)を直接読み取るためのストリームです。
ストリーム
「継続的にやり取りされるデータを、順次読み書きするための標準化された抽象インターフェース」です。
ストリームと「一括処理」の対比
観点 | ストリーム (stream) | 一括処理 (non-stream) |
---|---|---|
データの扱い方 | 流れてくるデータを順次読み書きする | 全データを一度に取得・保持してから処理する |
メモリ使用量 | 読む/書く単位が少量ずつなので、比較的少なく済む | 全体を読み込むため、データが大きいと大量のメモリが必要 |
実装のイメージ | fopen() →fread() で少しずつ読み進める | file_get_contents() などで一気に読み込んで、変数へ格納する |
処理の開始タイミング | データの先頭から届き次第すぐに処理を始められる | データを全部読み終わってからでないと処理を始めにくい |
リアルタイム性 | 高い(受信しながらリアルタイムで対応が可能) | 低い(全データ揃うのを待つ必要がある) |
主な用途 | 大容量、連続データ、ネットワーク通信、ログの逐次処理 | 小~中程度のファイルや一括ダウンロード・一括アップロードなど |
※ php:// でアクセスしているものは常に「ストリーム」ですが、file_get_contents() はそのストリームを内部で一気に読み込むだけです。ですので「php:// はストリームでありながら、file_get_contents() を使うと一括処理に見える」
php:// はどういうときに使用される?
通常のフォーム送信(application/x-www-form-urlencoded や multipart/form-data)であれば $_POST や $_FILES にデータが自動的に格納されますが、JSON形式や独自形式のデータを受け取る場合など、PHPが自動でパースしないデータ形式を扱う際に利用することが多いです。
http:// https://
PHPにおける http:// および https:// のストリームラッパーは、リモートサーバー上のファイルやコンテンツを「読み込む」ための仕組み
読み込み専用であることが多く、標準の方法では fwrite() 等による直接書き込みはできない
参考サイト
サポートするプロトコル/ラッパー
https://www.php.net/manual/ja/wrappers.php