fgets()是最常用的讀取一行數據的函數。其定義如下:
fgets(resource $handle, ?int $length = null): string|false
自動以換行符( \n )為結束標誌。
包含換行符在返回的字符串中。
適合讀取“標準行格式”的文本文件。
無法自定義行結束符。
$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
$length是最多讀取的字節數。
$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() |
---|---|---|
是否包含換行符 | 是 | 否 |
可否自定義行結束符 | 否 | 是 |
性能 | 一般 | 較優(尤其在網絡流中) |
靈活性 | 低 | 高 |
應用場景 | 本地文本文件讀取 | 網絡流、HTTP頭解析、自定義協議流 |
讀取本地日誌文件或配置文件。
快速讀取按行組織的文本數據。
編寫腳本處理標準輸入或文件輸入時。
讀取HTTP 或SMTP 等網絡協議中的分段數據。
控制行讀取行為(不包含結尾符號)。
構建自己的解析器(如自定義協議、基於行結束符切割的流數據)。