현재 위치: > 최신 기사 목록> Stream_get_line과 Fgets의 차이와 사용 시나리오 비교

Stream_get_line과 Fgets의 차이와 사용 시나리오 비교

gitbox 2025-05-29

fgets () 작동 방식

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 () 은보다 근본적이고 유연한 읽기 기능이며 다음과 같이 정의됩니다.

 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 헤더 구문 분석, 사용자 정의 프로토콜 흐름

적절한 사용 시나리오

fgets ()는 다음에 적합합니다.

  • 로컬 로그 파일 또는 구성 파일을 읽으십시오.

  • 행으로 구성된 텍스트 데이터를 빠르게 읽으십시오.

  • 표준 입력 또는 파일 입력을 처리하기 위해 스크립트를 작성할 때.

stream_get_line () 은 다음에 적합합니다.

  • HTTP 또는 SMTP와 같은 네트워크 프로토콜에서 세그먼트 된 데이터를 읽습니다.

  • 행하는 동작을 제어합니다 (종료 기호 제외).

  • 자신의 파서를 구축하십시오 (예 : 사용자 정의 프로토콜, 라인 엔딩 문자를 기반으로 스트림 데이터 컷).