2

ファイルの行数を取得する関数が見つからなかったので、使用する必要がありますか?

$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行を超えるかどうかだけです:-)。

前もって感謝します!

4

4 に答える 4

5

次を使用して行数を取得できます。

$file = 'smth.txt';    
$num_lines = count(file($file));
于 2010-08-18T19:14:36.490 に答える
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

于 2010-08-18T19:36:35.097 に答える
2

このより大きな問題は、ファイルが大きい場合に発生し、PHP は速度を低下させる傾向があります。exec コマンドを実行して、システムに番号を返させてみませんか? そうすれば、ファイルを読み取るための PHP のオーバーヘッドを心配する必要はありません。

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

または、もう少し派手にしたい場合:

$count = exec("awk '// {++x} END {print x}' /path/to/file");
于 2010-08-18T19:39:47.567 に答える
0

大きなファイルがある場合は、ファイルをセグメントで読み取り、「\ n」文字、または行末文字をカウントすることをお勧めします。たとえば、一部のシステムでは、「\ r」カウンターなどが必要になります...

$lineCounter=0;
$myFile =fopen('/pathto/file.whatever','r');
   while ($stringSegment = fread($myFile, 4096000)) {
$lineCounter += substr_count($stringSegment, "\n");
}
于 2010-08-18T20:05:23.643 に答える