如何从表单验证库codeigniter验证图像

时间:2013-09-04 11:34:38

标签: php codeigniter validation

我正在尝试从codeigniter中的表单验证扩展类验证图像,但它无法正常工作

控制器

public function __construct() {
    parent::__construct();
    $this->load->library('form_validation');
}

public function add_photo() { 

 $this->form_validation->set_rules('pic','Photo','validate_image['.$_FILES['pic'].']');


  if($this->form_validation->run()) {
   //some further coding
  }
}

在我的图书馆

class MY_Form_validation extends CI_Form_validation {

        public function __construct() {
        parent::__construct();
        $this->_CI = &get_instance();
    }

public function validate_image($image = NULL) {
        print_r($image);
        $file_name      =   $image['name'];

        $allowed_ext    =   array('jpg', 'jpeg', 'png', 'gif', 'bmp');
        $ext                =   strtolower(end(explode('.', $file_name)));

        $allowed_file_types =   array('image/jpeg','image/jpg','image/gif','image/png');
        $file_type              =   $image['type'];

        if(!in_array($ext, $allowed_ext) && !in_array($file_type, $allowed_file_types)) {
            $this->_CI->form_validation->set_message('validate_image', 'This file type is not allowed');
            return false;
        }

        if($image['size'] > 2097152) {
            $this->_CI->form_validation->set_message('validate_image', 'File size Exeeds');
            return false;
        } else {
            return true;
        }
    }


}

感谢任何建议和帮助。

2 个答案:

答案 0 :(得分:4)

它不会在form validation尝试它,

function validate_image(){
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']    = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';

    $this->upload->initialize($config);
    if (!$this->upload->do_upload('userfile'))
    {
        $this->validation->set_message('userfile',$this->upload->display_errors());
        return false;
    } else {
        return true;
    }
}  

参考this

答案 1 :(得分:3)

你可以这样做: 控制器:

public function add_photo() { 
    $this->form_validation->set_rules('product_image','Product Image','callback_validate_image');
    if($this->form_validation->run()==FALSE){
        $this->add($category_id);    
    }else{
        //your logic here
    }
}

回调验证方法:

public function validate_image() {
    $config = array(
        'allowed_types'=>'jpg|png',
        'upload_path'=> realpath(APPPATH . '../assets/img'),
        'max_size'=>1
        );
    $this->load->library('upload', $config);
    if (!$this->upload->do_upload('product_image'))
    {
        $this->form_validation->set_message('validate_image',$this->upload->display_errors());
        return false;
    } else {
        return true;
    }
}

APPPATH将为您提供codeigniter的应用程序文件夹的路径 realpath()会在没有../

的情况下为您提供实际路径