現在、ユーザーがファイルをアップロードするフォームを処理する以下のコードブロックがあります。ユーザーが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);
}
参考までに-私はテスト目的で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';
}
以下のコメントと回答に基づいて上記のコードブロックを更新し、正しく機能するようにしました。