PHP fgetcsv在文件开头返回false

时间:2014-11-25 19:29:27

标签: php fgetcsv

这是在Windows下运行的PHP脚本。它一直在运作但最近停止了。

打开文件并返回有效的文件句柄:$fh = fopen($filename, 'r');

但是,我第一次拨打fgetcsv时会返回false

$headers = fgetcsv($fh, 6000, ',');
$line_no++;
if($headers === FALSE){
    echo 'Error parsing file headers';
}

现在我正在尝试的所有csv文件上发生这种情况。我试图无济于事的其他变化是:

  • ini_set('auto_detect_line_endings', true);在打开文件之前
  • rewind($fh);打开文件后立即
  • 同时使用06000之类的数字作为第二个参数,长度。
  • 将文件的行结尾样式从unix更改为Windows和Mac

Windows似乎导致此文件无法解析。

有没有办法从fgetcsv返回实际错误?文档没有说明,只是它会在任何错误上返回false。是否有其他Windows设置可能导致问题? Windows安全设置使每个人都可以完全控制文件。

2 个答案:

答案 0 :(得分:0)

调试它的规范方法是" print_r($ headers)"。

当fgetcsv返回一个数组时,它必须是空的或非数组。如果您可以配置(或已配置)PHP以将错误记录到已知位置(带有IIS的Windows将是" syslog"并且应该显示在事件查看器中),您应该能够找出&# 39;错了。

答案 1 :(得分:0)

问题结果是脚本开头的更改使用了与锁定文件相同的文件,因此脚本不会同时在同一文件上运行两次。然后,在我实际想要解析文件的脚本后面,我再次打开它(这很成功),但后来我实际上无法读取内容。

我使用的解决方案是基于文件名创建临时锁定文件,而不是使用实际文件。例如:$filename.'.lock'

这对我来说是一个愚蠢的错误,但如果PHP在某个时候返回或写错误/警告会更有帮助。