fgets()
호출 루프를 사용하는 것이 좋은 솔루션이며 작성하기 가장 간단합니다.
내부적으로 8192 바이트의 버퍼를 사용하여 파일을 읽더라도 코드는 여전히 각 행에 대해 해당 함수를 호출해야합니다.
바이너리 파일을 읽는 경우 기술적으로 한 줄이 사용 가능한 메모리보다 클 수 있습니다.
이 코드는 각각 8kB의 청크 단위로 파일을 읽은 다음 해당 청크 내의 줄 바꿈 수를 계산합니다.
function getLines($file)
{
$f = fopen($file, 'rb');
$lines = 0;
while (!feof($f)) {
$lines += substr_count(fread($f, 8192), "\n");
}
fclose($f);
return $lines;
}
각 라인의 평균 길이가 최대 4kB이면 이미 함수 호출에 대한 저장을 시작하고 큰 파일을 처리 할 때 추가 될 수 있습니다.
기준
1GB 파일로 테스트를 실행했습니다. 결과는 다음과 같습니다.
+-------------+------------------+---------+
| This answer | Dominic's answer | wc -l |
+------------+-------------+------------------+---------+
| Lines | 3550388 | 3550389 | 3550388 |
+------------+-------------+------------------+---------+
| Runtime | 1.055 | 4.297 | 0.587 |
+------------+-------------+------------------+---------+
시간은 실시간으로 초 단위로 측정됩니다. 여기에서 실제 의미를 확인 하세요.
\n
Windows 시스템 (PHP_EOL == '\r\n'
) 에서 유닉스 스타일 파일 ( )을 구문 분석 할 수 있습니다.