图像扩展验证错误

时间:2015-08-08 08:50:24

标签: php yii

我给出了图像文件类型的验证规则:

array('employeedetails_photo', 'file', 'types' => 'jpg,gif,png', 'allowEmpty' => true,'on' => 'insert', 'on' => 'update'),

但问题是,如果将.doc文件的扩展名更改为.docx.jpg并将其上传为员工照片也会被接受。如何在yii中对此问题进行验证?

2 个答案:

答案 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