尝试使用在 Internet 上找到的以下代码(包括PHP 函数定义页面filegetcsv
)来解析 CSV 文件并对其进行处理:
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
print_r($data);
}
fclose($handle);
}
但是代码给了我一个无限循环的警告$data =
:
PHP Warning: fgetcsv() expects parameter 1 to be resource, boolean given in...
- 我知道我正在打开的文件是一个有效文件,因为如果我在文件名中添加一个虚拟字符,我会得到一个不同的错误并且没有循环。
- 该文件位于具有完全权限的文件夹中。
- 我没有使用 Mac 上的 Excel 生成的 CSV(那里有一个奇怪的错误)
- PHP版本5.1.6,所以功能应该没有问题
我知道文件不是太大,也不是格式错误,因为我一直在缩小原始文件以查看是否有问题,最后只是在记事本中创建了一个自定义文件,其中只有两行,例如:
值 1A、值 1B、值 1C、值 1D
仍在循环并且不提供任何数据。这是我现在正在使用的完整代码(使用一个大于行数的变量,所以我可以证明它会无限循环而实际上没有给我的服务器一个无限循环)
if ($handle = fopen($_SERVER['DOCUMENT_ROOT'].'/tmp/test-csv-file.csv', 'r') !== FALSE) {
while ((($data = fgetcsv($handle, 1000, ',')) !== FALSE) && ($row < 10)) {
print_r($data);
$row++;
}
fclose($handle);
}
所以我真的有两个问题。
1)我可能会忽略什么导致这个循环?我半信半疑,这真的是“面对面”简单的事情......
2) 如果文件存在但存在一些未知问题,为什么此函数的推荐代码会导致无限循环?我会认为!== FALSE
等等的目的是为了防止这种事情发生。