【问题标题】:fgetcsv doesn't validate whether or not this is a csv filefgetcsv 不验证这是否是 csv 文件
【发布时间】:2011-09-21 17:55:50
【问题描述】:

这个问题已经被问过好几次了,但事实证明我遇到的所有答案都是错误的。

我在验证文件是否为 CSV 时遇到问题。用户上传文件,应用程序会检查 fgetcsv 是否正常工作,以确保它是 CSV 而不是 Excel 文件或其他文件。这是我通过 Google 找到的传统答案。

例如:

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 就会验证为真,无论你给它什么;并且 fgetcsv 在使用 fopen($fileName, 'w') 或 'a' 时始终为 false,因为指针将在 EOF 处启动。这是根据 php.net 文档。

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

【问题讨论】:

  • 调试错误消息的专业精神的光辉典范。
  • 谢天谢地,这只是我学习乐趣的模型。在商业环境中这样做之前,我会三思而后行,可能

标签: php validation csv


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2022-01-06
    • 2015-04-30
    • 2015-05-23
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多