Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php YII2 XML文件上载无法验证_Php_Xml_Validation_Yii_Yii2 - Fatal编程技术网

Php YII2 XML文件上载无法验证

Php YII2 XML文件上载无法验证,php,xml,validation,yii,yii2,Php,Xml,Validation,Yii,Yii2,我正在制作一个文件上传控制器,将一组XML文件上传到服务器 但是,一些XML文件没有标记,Yii验证程序无法上载这些文件 public $xmlFiles; public function rules() { return [ [['xmlFiles'], 'file', 'skipOnEmpty' => false, 'extensions' => 'xml', 'maxFiles' => 20], ]; } public function

我正在制作一个文件上传控制器,将一组XML文件上传到服务器

但是,一些XML文件没有
标记,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;
    }
}

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

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

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

编辑:
您可以在规则中设置
mimeTypes
属性,以指定要有效的所有MIME类型。在您的情况下,它可能类似于:

['xmlFiles', 'file', 'skipOnEmpty' => false, 'mimeTypes' => ['application/xml'], 'maxFiles' => 20],
扩展名
属性被删除时,只检查MIME类型


在您的情况下,MIME类型可能只是
text/plain
(您应该先检查一下)。您可以在此处进行设置,但它将允许所有纯文本文件,这仍然比允许所有文件要好。

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

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

编辑:
您可以在规则中设置
mimeTypes
属性,以指定要有效的所有MIME类型。在您的情况下,它可能类似于:

['xmlFiles', 'file', 'skipOnEmpty' => false, 'mimeTypes' => ['application/xml'], 'maxFiles' => 20],
扩展名
属性被删除时,只检查MIME类型


在您的情况下,MIME类型可能只是
text/plain
(您应该先检查一下)。您可以在此处设置,但它将允许所有纯文本文件,这比允许所有文件要好。

这正是我试图避免的,这正是我试图避免的