我目前有下面的代码块处理用户上传文件的表单。如果用户上传了 fgetcsv 无法处理的文件,我如何让它返回错误?现在,当我尝试让它处理图像时,我的脚本继续运行并且我从未收到错误消息。
我尝试测试 $data 以确定它是否为空,但我得到的只是错误。
if (($handle = fopen($_FILES['fileUpload']['tmp_name'], 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$total = count($data);
for ($e=0; $e < $total; $e++) {
echo $data[$e] . "<br />";
}
echo "<br />";
}
fclose($handle);
}
作为一个仅供参考 - 我只是为了测试目的打印出 csv 内容。在最终脚本中,我将只将数组保存在会话中。
更新: 正如@hakre 建议的那样,我问了错误的问题。我已经接受了他的回答,因为我遇到了麻烦并且我不完全理解它,所以我将其修改为您在下面看到的内容。
一切都很好,除了线路这是根据@harke 评论修复的。 if ($row === null) continue;
不起作用。我已经尝试过使用和不使用括号null
。空行是在文件中间还是最后一行似乎并不重要。if ($row === null) continue;
被替换为if ($row === array(null)) continue;
$uploadTempfile = $_FILES['fileUpload']['tmp_name'];
$file = new SplFileObject($uploadTempfile);
$file->setFlags(SplFileObject::READ_CSV);
$limit = new LimitIterator($file, 0, 10); // scan the first 10 lines only
foreach ($limit as $row) {
if ($row === array(null)) continue; // skip empty lines
$columnCount[] = count($row);
}
if(count(array_unique($columnCount)) === 1){
echo 'file is valid';
} else {
echo 'file is INVALID';
}
我已经根据下面的评论和答案更新了上面的代码块,以便它现在可以正常工作。