我给出了图像文件类型的验证规则:
array('employeedetails_photo', 'file', 'types' => 'jpg,gif,png', 'allowEmpty' => true,'on' => 'insert', 'on' => 'update'),
但问题是,如果将.doc
文件的扩展名更改为.docx.jpg
并将其上传为员工照片也会被接受。如何在yii中对此问题进行验证?
答案 0 :(得分:1)
验证图片的最佳方法是使用GD imagecreatefrom*
(或Imagick)重新创建图片并保存/替换已处理的图片。最简单的例子
public function rules(){
return array(
array( 'employeedetails_photo', 'validateImage' )
);
}
public function validateImage( $attribute ){
$file = CUploadedFile::getInstance($this, $attribute);
if ( !$file ) {
return;
}
// http://php.net/manual/en/function.imagecreatefromstring.php
// These types will be automatically detected if your build of PHP supports them: JPEG, PNG, GIF, WBMP, and GD2
$gd = @imagecreatefromstring(file_get_contents($file->getTempName()));
if ($gd === false) {
$this->addError($attribute, 'Image is corrupted');
}
}
答案 1 :(得分:0)
您必须使用文件mimetype检查文件类型。 Php应该为你做到。 use mime-content-type function