私はphpが初めてです。txt ドキュメントの行数を数えようとしていますが、これは常に 1 を返します (ファイルにはさらに多くの行があるにもかかわらず):
<?php
$file = "example.txt";
$lines = count(file($file));
print "There are $lines lines in $file";
?>
これはなぜだと思いますか?ちなみに私はMac OSxを使っています。
ありがとう
これを試して:
$file = "example.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
fclose($handle);
echo $linecount;
PHP マニュアル ( http://www.php.net/manual/en/function.file.php ) から:
Note: If PHP is not properly recognizing the line endings when reading files
either on or created by a Macintosh computer, enabling the auto_detect_line_endings
run-time configuration option may help resolve the problem.
それが原因かもしれません。これ以上の情報がなければなんとも言えません。
ファイル全体をメモリにロードしないため、これによりメモリの使用量が少なくなります。
$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
fclose($handle);
echo $linecount;
fgets は 1 行をメモリにロードします (2 番目の引数 $length が省略されている場合、行の最後に到達するまでストリームから読み取り続けます。これが目的です)。ウォールタイムとメモリ使用量を気にする場合、これは PHP 以外のものを使用する場合と同じくらい高速ではない可能性があります。
これに関する唯一の危険は、行が特に長い場合です (改行のない 2 GB のファイルに遭遇した場合はどうなるでしょうか?)。その場合、チャンクで丸呑みし、行末文字を数えることをお勧めします:
$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle, 4096);
$linecount = $linecount + substr_count($line, PHP_EOL);
}
fclose($handle);
echo $linecount;
特定のファイルの行だけを知りたい場合は、2 番目のコードを好みます