• PHP
【PHP】プロトコル / ラッパーについて(file:// php:// http:// https://)

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