我目前有以下代码块处理用户上传文件的表单。如果用户上传fgetcsv无法处理的文件,如何才能返回错误?现在,当我尝试让它处理图像时,我的脚本继续运行,我从未收到错误消息。
我尝试测试$ data以确定它是否为null但我得到的只是错误。
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);
}
作为一个FYI - 我只打印出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';
}
我已根据以下评论和答案更新了上述代码块,以便现在可以正常使用。
答案 0 :(得分:2)
如果用户上传fgetcsv无法处理的文件,如何让它返回错误?
这可能是错误的问题。 fgetcsv
可以处理任何文件。因此,总是如此,这样的函数将始终返回成功,永远不会出错。
你可能意味着你想检查CSV文件并稍微验证它的内容,如果它可能是你正在寻找的那种CSV文件。
这还要求您明确该文件是否应该具有某种特定性质,例如:总是相同数量的列,这可能是你正在寻找的。 p>
以下代码示例检查CSV文件的前10行,它至少包含一行,这10行中的每一行(如果不为空)具有完全相同的计数且计数大于1: / p>
$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 === [null]) continue; // skip empty lines
$rowCount = count($row);
if (!isset($count)) {
$count = $rowCount;
}
if ($rowCount !== $count) {
break;
}
}
$valid = (isset($count) and $rowCount === $count and $count > 1);