YII2 XML文件上传不会验证

时间:2017-09-01 23:46:29

标签: php xml validation yii yii2

我正在创建一个文件上传控制器,将一堆XML文件上传到服务器。

但是,某些XML文件没有<xml version="1.0" encoding="UTF-8">标记,并且Yii验证程序无法上传这些文件。

public $xmlFiles;

public function rules() {
    return [
        [['xmlFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'xml', 'maxFiles' => 20],
    ];
}

public function upload($path) {
    if (empty($path)) {
        return false;
    }

    FileHelper::createDirectory($path);

    if ($this->validate()) {
        foreach ($this->xmlFiles as $file) {
            $file->saveAs($path . $file->baseName . '.' . $file->extension);
        }
        return true;
    }
    else {
        return false;
    }
}

如何更改验证规则以允许此类文件?

1 个答案:

答案 0 :(得分:0)

您始终可以在验证规则中将checkExtensionByMimeType设置为false,看看它是否有帮助。

这个强制验证器不会将MIME类型与文件扩展名进行比较,因此有些文件可以传递(如纯文本* .csv文件或可能是* .xml文件)。请注意,使用此选项,用户只能通过重命名其扩展名向您发送任何恶意文件。

修改
您可以将规则中的mimeTypes属性设置为您希望有效的所有MIME类型。在你的情况下,它可能是这样的:

['xmlFiles', 'file', 'skipOnEmpty' => false, 'mimeTypes' => ['application/xml'], 'maxFiles' => 20],

删除extensions属性时,仅检查MIME类型。

虽然在你的情况下MIME类型只是text/plain是可能的(你应该先检查一下)。你可以在这里设置它,但它将允许所有纯文本文件,它仍然比允许所有内容更好。