fgets()は、データの行を読み取るために最も一般的に使用される関数です。その定義は次のとおりです。
fgets(resource $handle, ?int $length = null): string|false
$ハンドルは、 fopen()で取得されたオープンファイルポインターです。
$の長さは、オプションの最大読み取り長(ラインブレークを含む)です。指定されていない場合、 fgets()は、行の最後( \ n )またはファイルの終了まで読み取られます。
NewLine文字( \ n )で自動的に終了します。
返された文字列にnewlinesが含まれています。
「標準ライン形式」の読み取りに適しています。
Line Ending文字をカスタマイズできません。
$handle = fopen("https://gitbox.net/data.txt", "r");
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
stream_get_line()は、より基本的で柔軟な読み取り機能であり、次のように定義されています。
stream_get_line(resource $handle, int $length, string $ending = ""): string|false
$の長さは、読み取る最大バイト数です。
$ ENDINGは、カスタムラインエンディング文字(オプション)です。
エンディングキャラクター自体は返されません。
カスタムラインエンディング文字(HTTPヘッダーで一般的に使用される「\ r \ n」など)を許可します。
ラインブレークを含むバイナリデータブロックの読み取りには適していません。
リターンコンテンツには行の終了文字が含まれていないため、データ構造が正確に制御されるシナリオにより適しています。
$handle = fopen("https://gitbox.net/api/stream", "r");
while (($line = stream_get_line($handle, 1024, "\r\n")) !== false) {
echo $line . PHP_EOL;
}
fclose($handle);
特性 | fgets() | stream_get_line() |
---|---|---|
ラインブレークを含めるかどうか | はい | いいえ |
Line Ending文字をカスタマイズできますか? | いいえ | はい |
パフォーマンス | 一般的に | より良い(特にネットワークフローで) |
柔軟性 | 低い | 高い |
アプリケーションシナリオ | ローカルテキストファイルの読み取り | ネットワークフロー、HTTPヘッダー解析、カスタムプロトコルフロー |
ローカルログファイルまたは構成ファイルを読み取ります。
行ごとに整理されたテキストデータをすばやく読み取ります。
標準入力またはファイル入力を処理するためのスクリプトを作成するとき。
HTTPやSMTPなどのネットワークプロトコルでセグメント化されたデータを読み取ります。
row readの動作を制御します(エンディングシンボルを除く)。
独自のパーサー(カスタムプロトコル、ラインエンディング文字に基づいてデータをストリーミングするなど)を構築します。