Php YII2 XML文件上载无法验证
我正在制作一个文件上传控制器,将一组XML文件上传到服务器 但是,一些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
标记,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
(您应该先检查一下)。您可以在此处设置,但它将允许所有纯文本文件,这比允许所有文件要好。这正是我试图避免的,这正是我试图避免的