2010-08-18 8 views
2

나는 내가파일에 X 행 이상이 있는지 확인하십시오.

$handle = fopen("file.txt"); 

For($Line=1; $Line<=10; $Line=$Line+1){ 
fgets($handle); 
} 

If feof($handle){ 
echo "File has 10 lines or more."; 
}Else{ 
echo "File has less than 10 lines."; 
} 

fclose($handle) 

또는 유사한 것을 사용해야합니까, 파일이이 라인의 양을 검색하는 기능을 찾을 수 없습니다로? 내가 알고 싶은 건 파일에 10 줄 이상이 있는지 아닌지 :-).

미리 감사드립니다.

+2

나에게 잘 어울립니다. – XstreamINsanity

답변

4

당신이 사용하는 라인의 수를 얻을 수 있습니다 :

$file = 'smth.txt';  
$num_lines = count(file($file)); 
+4

그러나 전체 파일에서 메모리로 읽는 것은 매우 큰 파일에는 바람직하지 않을 수 있음을 명심하십시오. – Gordon

+0

고맙다. rpSetzer와 Gordon이 헤드 업. – Chris

2

더 빨리, 더 많은 메모리 수완 :

$file = new SplFileObject('file.txt'); 
$file->seek(9); 
if ($file->eof()) { 
echo 'File has less than 10 lines.'; 
} else { 
echo 'File has 10 lines or more.'; 
} 

SplFileObject

+0

답장을 보내 주셔서 감사합니다. 나중에 사용 하겠지만 사용중인 파일에는 1-12 행만 있습니다 .--). – Chris

+0

나는 이것이 "10 줄 이하"*와 "10 줄 이상"이어야한다고 생각합니다. * – Gordon

2

당신이 큰 파일이있는 경우 더 큰이 문제가 발생합니다, PHP는 속도가 느려지는 경향이 있습니다. 왜 exec 명령을 실행하고 시스템이 그 번호를 반환하게할까요? 그렇다면 파일을 읽는 PHP 오버 헤드에 대해 걱정할 필요가 없습니다.

$count = exec("wc -l /path/to/file"); 

또는 당신은 좀 더 화려한 얻으려면 :

$count = exec("awk '// {++x} END {print x}' /path/to/file"); 
+0

아래 투표에 대한 설명이 없습니까? –

+0

나는 당신을지지했지만 모든 사람들이 리눅스에서 PHP를 사용하지는 않는다는 것을 명심해야한다. – mhitza

+0

나는 그것을 얻는다. 하지만 그게 솔루션과 관련이 있습니까? 이것은 Linux/Mac/FreeBSD/UNIX 등에서 작동합니다. 유일한 문제는 Windows에서 발생합니다. 즉, OS를 명시하지 않았다는 점을 감안할 때 이것은 여전히 ​​우아한 해결책이라고 생각합니다. 나는 그것이 아래 표를 보증한다고 생각하지 않는다. –

0

당신이 세그먼트 카운트에서 파일을 읽을 수 schould 다음 더 큰 파일이있는 경우 "\ n"은 문자, 또는 무엇 있나이다 예를 들어 일부 시스템에서는 "r"카운터가 필요합니다.

$lineCounter=0; 
$myFile =fopen('/pathto/file.whatever','r'); 
    while ($stringSegment = fread($myFile, 4096000)) { 
$lineCounter += substr_count($stringSegment, "\n"); 
} 
관련 문제