PHP fgetcsv没有获得正确的行数

时间:2012-06-11 14:30:28

标签: php csv fgets

我有一个相当大的csv文件(17GB),我正在尝试进行健全性检查。我写了一个看起来像这样的小脚本:

#!/usr/bin/php
<?php

$f = fopen($argv[1],'r');

$i=0;
while (!feof($f)) {
        $row = fgetcsv($f);
        $i++;
}
print $i."\n";

?>

应该只读取行数并将其打印出来。此脚本输出: 60770881

但如果我做了wc -l,结果就是60777200。

我的csv文件是使用以下命令从MySQL生成的:

INTO OUTFILE '/tmp/file.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'

所以它不应该有任何未转义的换行符或类似的东西。有谁知道可能出现什么问题?

1 个答案:

答案 0 :(得分:3)

CSV记录可以跨越多行。如果您在任何值中有回车符,则文件中将有多个(2个或更多)物理行(由wc计算),但它们将使用{{1}作为一个CSV记录读取}。

此外,您无需检查fgetcsv,因为feof($f)将在文件末尾返回FALSE。