这个问题已被多次询问,但事实证明我遇到的所有答案都是错误的。
我在验证文件是否为CSV时遇到问题。用户上传文件,应用程序检查fgetcsv是否有效以确保它是CSV而不是Excel文件或其他内容。这是我通过谷歌找到的传统答案。
e.g:
if ($form->file->receive()) {
$fileName = $form->file->getFileName();
$handle = fopen($fileName, 'r'); // or 'w', 'a'
if (fgetcsv($handle)) {
die('sos yer face');
}
if ($PHPExcelReader->canRead($fileName)) {
die('that\'s what she said');
}
}
上面的内容是'sos yer face',因为只要有一个要读取的文件,如果你的句柄来自fopen($ fileName,'r'),无论你给它什么,fgetcsv都会被验证为真;当使用fopen($ fileName,'w')或'a'时,fgetcsv总是为false,因为指针将在EOF处启动。这是根据php.net文档。
也许我说的是荒谬的,我只是没有意识到这一点。任何人都可以修复我的大脑。
答案 0 :(得分:1)
验证文件是否为CSV文件的问题是CSV不是定义良好的格式。事实上,根据CSV的大多数定义,几乎任何文件都是有效的CSV,将每一行视为一行,只有一列。
您需要针对您正在使用的域提出自己的验证例程。