fgets ()는 데이터 행을 읽는 데 가장 일반적으로 사용되는 기능입니다. 그 정의는 다음과 같습니다.
fgets(resource $handle, ?int $length = null): string|false
$ 핸들은 열린 파일 포인터입니다 ( fopen () 로 얻은).
$ 길이는 선택적 최대 읽기 길이 (라인 브레이크 포함)입니다. 지정되지 않으면 FGETS ()는 줄 끝 ( \ n ) 또는 파일 끝까지 읽습니다.
자동으로 Newline 캐릭터 ( \ 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
$ 길이는 읽을 최대 바이트 수입니다.
$ 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와 같은 네트워크 프로토콜에서 세그먼트 된 데이터를 읽습니다.
행하는 동작을 제어합니다 (종료 기호 제외).
자신의 파서를 구축하십시오 (예 : 사용자 정의 프로토콜, 라인 엔딩 문자를 기반으로 스트림 데이터 컷).