fgetcsv不验证这是否是csv文件

时间:2011-09-21 17:55:50

标签: php validation csv

这个问题已被多次询问,但事实证明我遇到的所有答案都是错误的。

我在验证文件是否为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文档。

也许我说的是荒谬的,我只是没有意识到这一点。任何人都可以修复我的大脑。

1 个答案:

答案 0 :(得分:1)

验证文件是否为CSV文件的问题是CSV不是定义良好的格式。事实上,根据CSV的大多数定义,几乎任何文件都是有效的CSV,将每一行视为一行,只有一列。

您需要针对您正在使用的域提出自己的验证例程。