这是在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);
打开文件后立即0
或6000
之类的数字作为第二个参数,长度。Windows似乎导致此文件无法解析。
有没有办法从fgetcsv
返回实际错误?文档没有说明,只是它会在任何错误上返回false
。是否有其他Windows设置可能导致问题? Windows安全设置使每个人都可以完全控制文件。
答案 0 :(得分:0)
调试它的规范方法是" print_r($ headers)"。
当fgetcsv返回一个数组时,它必须是空的或非数组。如果您可以配置(或已配置)PHP以将错误记录到已知位置(带有IIS的Windows将是" syslog"并且应该显示在事件查看器中),您应该能够找出&# 39;错了。
答案 1 :(得分:0)
问题结果是脚本开头的更改使用了与锁定文件相同的文件,因此脚本不会同时在同一文件上运行两次。然后,在我实际想要解析文件的脚本后面,我再次打开它(这很成功),但后来我实际上无法读取内容。
我使用的解决方案是基于文件名创建临时锁定文件,而不是使用实际文件。例如:$filename.'.lock'
这对我来说是一个愚蠢的错误,但如果PHP在某个时候返回或写错误/警告会更有帮助。