PHP使CSV文件无效

时间:2013-11-01 22:46:33

标签: php csv

嘿伙计们我在fread上看到了很多选项(这需要一个fiole,或写入内存), 但我试图根据已被接受的字符串(未知格式)使输入无效。我有类似的东西

        if (FALSE !== str_getcsv($this->_contents, "\n"))
        {
            foreach (preg_split("/\n/", $this->_contents) AS $line)
            {
                $data[] = explode(',', $line);
            }

            print_r($data); die;
            $this->_format = 'csv';
            $this->_contents = $this->trimContents($data);

            return true;
        }

哪个在真正的csv或csv填充变量上运行正常,但是当我尝试将它传递给无效时,类似于: https://www.gravatar.com/avatar/625a713bbbbdac8bea64bb8c2a9be0a4这是垃圾(因为它是一个png),它相信它的csv 无论如何,继续前进,直到程序窒息。我怎样才能解决这个问题?我还没有看到和CSV验证器 是不是至少有几个类深入,是否有一个简单的三行或四行(in)验证?

2 个答案:

答案 0 :(得分:1)

如果您对可能进入系统的CSV类型有所了解,可以应用一些启发式方法 - 冒着不接受有效CSV的风险。例如,您可以查看行长度,行长度的一致性,特殊字符等等。

如果您所做的只是检查是否存在逗号和换行符,那么任何足够大的随机文件都可能会有这些文件,从而通过这样的CSV测试。

答案 1 :(得分:1)

  

是否有一个简单的三行或四行(in)验证?

不。 CSV是如此松散地定义 - 它没有像标题字节那样的标志,甚至没有标准用于分隔列的字符! - 技术上是 no 方式来判断文件是否为CSV - 即使您的PNG在技术上可能是一个巨大的单列CSV,带有一些深奥的字段和行分隔符。

要进行验证,请查看您使用CSV文件的目的以及您期望的输入。这些文件是否包含地址数据,分为10列?然后查看文件的第一行,查看是否存在足够的列,以及它们是否包含字母数字数据。您在寻找一个充满数字的CSV文件吗?然后解析第一行,并查找所需的值类型。等等...