我是php的新手。 我试图计算txt文档中的行,但这总是返回1(尽管文件中有更多的行):
<?php
$file = "example.txt";
$lines = count(file($file));
print "There are $lines lines in $file";
?>
为什么你认为这是? 作为旁注,我使用的是Mac OSx。
由于
答案 0 :(得分:0)
试试这个:
$file = "example.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
fclose($handle);
echo $linecount;
答案 1 :(得分:0)
从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.
这可能是它的原因。没有更多信息很难说。
答案 2 :(得分:0)
这将使用更少的内存,因为它不会将整个文件加载到内存中:
$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
fclose($handle);
echo $linecount;
fgets将一行加载到内存中(如果省略第二个参数$ length,它将继续从流中读取,直到它到达行的末尾,这就是我们想要的)。如果您关心壁挂时间以及内存使用情况,这仍然不如使用PHP之外的其他内容那么快。
唯一的危险是如果任何行特别长(如果你遇到没有换行符的2GB文件怎么办?)。在这种情况下,你最好不要在块中啜饮它,并计算行尾字符:
$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;
如果我只想知道特定文件中的行
,我更喜欢第二个代码