PHP가 대용량 파일을 읽는 가장 일반적인 방법은 fseek 함수를 사용하는 것입니다. 파일의 모든 내용을 메모리로 읽어올 필요는 없지만 포인터를 통해 직접 작동하므로 사용 시 효율성이 매우 높습니다. fseek 파일을 조작하는 방법은 다양하며 효율성이 약간 다를 수 있습니다. 다음은 일반적으로 사용되는 두 가지 방법입니다.
방법 1:
먼저 파일의 마지막 끝을 찾습니다. fseek 하나의 EOF를 통해 마지막 행의 시작 위치를 찾고 이 행의 데이터를 가져온 다음 다음 행의 시작 위치를 찾은 다음 이 행의 위치를 가져오는 식으로 $num 행이 설립하다. 구현 코드는 다음과 같습니다.
전체 코드 실행 시간은 0.0095(s)입니다.
function tail($fp,$n,$base=5) { assert($n>0); $pos = $n+1; $lines = array(); while(count($lines)< =$n){ try{ fseek($fp,-$pos,SEEK_END); } catch (Exception $e){ fseek(0); break; } $pos *= $base; while(!feof($fp)){ array_unshift($lines,fgets($fp)); } } return array_slice($lines,0,$n); } var_dump(tail(fopen("access.log","r+"),10));
방법 2:
여전히 fseek를 사용하여 코드 끝부터 읽습니다. 파일이지만 이때는 비트 단위로 읽는 것이 아니고, 데이터를 한 조각씩 읽을 때마다 읽은 데이터를 buf에 담고 개행 문자 수(n)는 다음과 같습니다. 마지막 $num 행의 데이터를 읽어온 후 구현 코드는 다음과 같습니다
전체 코드 실행에는 0.0009(s)가 소요됩니다.
$fp = fopen($file, "r"); $line = 10; $pos = -2; $t = " "; $data = ""; while ($line > 0) { while ($t != "n") { fseek($fp, $pos, SEEK_END); $t = fgetc($fp); $pos --; } $t = " "; $data .= fgets($fp); $line --; } fclose ($fp); echo $data
감사합니다 읽어주셔서 모두에게 도움이 되기를 바랍니다. 이 기사를 검토해 주셔서 감사합니다. 사이트 지원!
php fseek 기능을 사용하여 대용량 파일을 읽는 두 가지 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!