为什么PHPExcel_IOFactory可以读取?几乎?通过HTML阅读器的所有文件

时间:2016-08-25 09:23:01

标签: php validation phpexcel

我的form中有一个输入类型文件,并且我已经提供了所有类型的最常用扩展程序来测试我是否可以访问Exception

throw new PHPExcel_Reader_Exception('Unable to identify a reader for this file');

由于所有常用的扩展程序都使用HTML阅读器,所以我的所有测试都不是决定性的,其他here使用正确的预期阅读器和我的代码:

public function initExtract(SomeDeps $deps, array $document)
    {
        libxml_use_internal_errors(true);
        $fileType = \PHPExcel_IOFactory::identify($document['tmp_name']);
        $reader = \PHPExcel_IOFactory::createReader($fileType);
        $this->excel = $reader->load($document['tmp_name']);

        var_dump($reader, $this->excel);
    }

我想知道为什么PNG, JPG, GIF, PDF or TXT使用HTML Reader并且可读? 为什么没有对this method的读者进行测试以确定提供的文档中是否存在HTML DOM? 只是"<"是不是IMO

我错过了什么吗?以上是否真的使用过例?什么扩展?

这是为了准确确定我必须在formValidation检查哪个扩展名,因为PhPExcel可能过于宽松。

1 个答案:

答案 0 :(得分:1)

正版OfficeOpenXML文件(xlsx)应该使用Excel2007 Reader,真正的BIFF格式文件(xls)应该使用Excel5 Reader ....但只是因为文件的扩展名为{ {1}}或xls并不意味着它是真正的BIFF或OfficeOpenXML格式文件。

如果PHPExcel将文件(无论扩展名如何)标识为HTML,并使用HTML Reader,请在文本编辑器中打开该文件,看看它到底是什么。 HTML将很容易作为标记读取;真正的BIFF格式xls或OfficeOpenXML格式的xlsx文件是二进制文件,因此显然会有所不同。

至于为什么我们有一个simplistic check,我们不希望人们在PHPExcel上抛出任何可以想象的文件,而不知道它是否可能是一个电子表格文件;但也许如果我的IYO不足,那么你可以修改检查方法以提供更全面的有效性检查,并将其作为PR提交