현재 위치: > 최신 기사 목록> 큰 파일 끝에서 N 라인을 효율적으로 읽기위한 모범 사례

큰 파일 끝에서 N 라인을 효율적으로 읽기위한 모범 사례

gitbox 2025-06-30

소개

PHP 프로그래밍에서는 특히 로그 파일 또는 기타 로그 파일을 처리 할 때 큰 파일의 마지막 몇 줄을 읽어야합니다. 프로그램의 성능을 향상시키고 전체 파일을 메모리에 직접로드하지 않으려면보다 효율적인 읽기 방법을 채택해야합니다.

문제 분석

전통적인 방법은 파일 함수를 통해 전체 파일을 메모리에로드하고 배열로 변환 한 다음 배열 작업을 통해 끝에서 컨텐츠 라인을 얻는 것입니다. 그러나이 접근법은 많은 메모리를 소비하기 때문에 큰 파일의 경우 효율적이지 않습니다.

따라서 파일 끝에서 N 컨텐츠 라인을 읽을 수있는 더 메모리 절약 및 효율적인 방법이 필요합니다.

효율적인 방법

효율성을 향상시키기 위해 PHP의 FSEEK 및 FGETC와 같은 기능을 사용하여 큰 파일 끝에서 N 라인을 점차적으로 읽을 수 있습니다. 특정 단계는 다음과 같습니다.

파일 끝까지 위치

먼저 FOPEN을 통해 파일을 열고 FSEEK를 사용하여 파일의 끝에 파일 포인터를 찾습니다.

 $file = "path/to/file.txt";
$file_handle = fopen($file, "r");
fseek($file_handle, 0, SEEK_END);

컨텐츠 라인을 앞으로 읽으십시오

다음으로, 우리는 Newline이 발견 될 때까지 파일 내용을 하나씩 읽으려면 fgetc를 사용해야합니다. 행을 읽을 때 행 내용물을 배열에 저장하고 N 목차가 얻을 때까지 앞으로 계속 읽으십시오.

 $lines = [];
$n = 10;
$pos = ftell($file_handle);
while ($n > 0 && $pos) {
    fseek($file_handle, $pos);
    if (($char = fgetc($file_handle)) === "\n") {
        array_unshift($lines, fgets($file_handle));
        $n--;
    }
    $pos--;
}

이 과정에서 우리는 한 번에 캐릭터를 읽습니다. 우리가 Newline을 만나면 라인을 읽었 음을 의미합니다. 행을 읽을 때마다 배열의 시작 부분에 삽입되어 필요한 행 수를 읽을 때까지 n을 1로 줄입니다.

요약

FSEEK 및 FGETC 함수를 사용하면 큰 파일 끝의 N 줄을 효율적으로 읽을 수 있습니다. 이 접근법은 메모리를 저장할뿐만 아니라 전체 파일을 메모리에 직접 읽는 것과 비교하여 처리 속도를 크게 향상시킵니다. 이 방법은 파일 끝에 몇 줄만 필요하며 큰 파일을 처리하는 데 이상적인 시나리오에 적합합니다.