Проверка Загрузки Файла В Codeigniter

Я пытаюсь проверить загрузку файла для загрузки изображения, но он не получает проверку, как другие поля. Я использую Form_Validation.php процесс проверки.

массив загрузки изображений:

array(
            'field'=>'image',
            'label' => 'Image',
            'rules' => 'required'
        )

когда я пытаюсь загрузить изображение, оно не отвечает, как требуется и т. д. Я также хочу проверить его для .jpg etc и "как установить значение файла на неправильный файл, как вместо .jpg мы пытаемся загрузить .pdf", как мы устанавливаем значение поля ввода set_value('field name') etc.

Я проверил много вопросов, а также пытаюсь использовать метод вызова, но не смог его исправить.

обновление:

пожалуйста, предоставьте подробный ответ с примером кода. Пожалуйста, используйте form_validation.php путь в Примере, а также предоставить пример кода обратного вызова, так что я могу прочитать / узнать и изменить его соответственно.

обновление 2:

 public function Task()
    {
        if ($this->form_validation->run('Sub_Admin/task') == FALSE) {
            $this->data['Task'] = $this->bm->get_usr();
            $data['title'] = "Add New Task";
            $this->load->view('Subadmin/header',$data);
            $this->load->view('Subadmin/nav');
            $this->load->view('Subadmin/sidebar');
            $this->load->view('Subadmin/task', $this->data);
            $this->load->view('Subadmin/footer');
        }
        else
        {

            $config['upload_path'] = './taskimages/'; //The path where the image will be save
            $config['allowed_types'] = 'gif|jpg|png'; //Images extensions accepted
            $config['max_size'] ='10048'; //The max size of the image in kb's
            //$config['max_width']  = '1024'; //The max of the images width in px
            //$config['max_height']  = '768'; //The max of the images height in px
            $config['overwrite'] = FALSE; //If exists an image with the same name it will overwrite. Set to false if don't want to overwrite
            $this->load->library('upload', $config); //Load the upload CI library
            $this->load->initialize($config);
            $this->upload->do_upload('task');
            $file_info = $this->upload->data();
            $file_name = $file_info['file_name'];
            $data = array(
                'Job_Title' => $this->input->post('jtitle'),
                'Priority' => $this->input->post('jnature'),
                'Assignee' => $this->input->post('assigne'),
                'Employee_Name' => $this->input->post('assignto'),
                'Due_Date' => $this->input->post('ddate'),
                'Reminder' => $this->input->post('reminder'),
                'Task_Image' => $file_name,
            );

            $this->bm->add_task($data);

        }
    }

я уже использую CI загрузка класса, но он не работает, и теперь я хочу проверить изображение/ файл со стороны form_validation.

7 ответов


Я написал полный пример для вашей проблемы, я надеюсь, что это поможет. В следующем коде я использую обратный вызов проверки формы CI и пользовательские сообщения об ошибках проверки формы.

: фронт.в PHP

фронт класса расширяет CI_Controller {

public function index() {
    $this->load->view('form');
}

public function upload_image() {
    $this->load->library('form_validation');
    if ($this->form_validation->run('user_data') == FALSE) {
        $this->load->view('form');
    }
    else {
        echo 'You form Submitted Successfully ';
    }
}

public function validate_image() {
    $check = TRUE;
    if ((!isset($_FILES['my_image'])) || $_FILES['my_image']['size'] == 0) {
        $this->form_validation->set_message('validate_image', 'The {field} field is required');
        $check = FALSE;
    }
    else if (isset($_FILES['my_image']) && $_FILES['my_image']['size'] != 0) {
        $allowedExts = array("gif", "jpeg", "jpg", "png", "JPG", "JPEG", "GIF", "PNG");
        $allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
        $extension = pathinfo($_FILES["my_image"]["name"], PATHINFO_EXTENSION);
        $detectedType = exif_imagetype($_FILES['my_image']['tmp_name']);
        $type = $_FILES['my_image']['type'];
        if (!in_array($detectedType, $allowedTypes)) {
            $this->form_validation->set_message('validate_image', 'Invalid Image Content!');
            $check = FALSE;
        }
        if(filesize($_FILES['my_image']['tmp_name']) > 2000000) {
            $this->form_validation->set_message('validate_image', 'The Image file size shoud not exceed 20MB!');
            $check = FALSE;
        }
        if(!in_array($extension, $allowedExts)) {
            $this->form_validation->set_message('validate_image', "Invalid file extension {$extension}");
            $check = FALSE;
        }
    }
    return $check;
}

}

вид: форма.в PHP

<!DOCTYPE html>
<html>
<head>
    <title>Image Upload</title>
</head>
<body>
    <h1><a href="<?= base_url() ?>">Form</a></h1>
    <?php if(!empty(validation_errors())): ?>
        <p><?= validation_errors() ?></p>
    <?php endif; ?>
    <?= form_open('front/upload_image', ['enctype' => "multipart/form-data"]) ?>
    <label>Name: </label><input type="text" name="name" value="<?= set_value('name') ?>"></label>
    <label>E-mail: </label><input type="email" name="email" value="<?= set_value('email') ?>"></label>
    <input type="file" name="my_image">
    <button type="submit">Submit</button>
    <?= form_close() ?>
</body>
</html>

form_validation.в PHP

$config = array(
        'user_data' => array(
                array(
                        'field' => 'name',
                        'label' => 'Name',
                        'rules' => 'trim|required'
                ),
                array(
                        'field' => 'email',
                        'label' => 'Email',
                        'rules' => 'trim|required|valid_email'
                ),
                array(
                        'field' => 'my_image',
                        'label' => 'Image',
                        'rules' => 'callback_validate_image'
                )
        )
);

в выше пример сначала я проверяю name и email и для изображения я называю validate_image функция для его проверки, так как библиотека form_validation не обеспечивает проверку изображения, но у меня есть обратные вызовы для выполнения пользовательских проверок,validate_image проверит тип содержимого изображения, затем проверьте размер файла изображения, а затем проверьте расширение изображения, если какие-либо из этих требований не выполняются, он установит сообщение об ошибке для каждого требования, используя set_message() функции form_validation библиотека.


В настоящее время вы не получаете ошибку, потому что вы устанавливаете правила проверки, вы также инициализировали конфигурацию, но после загрузки класса вы не проверяете, что файл загружается или ошибки.

пожалуйста, проверьте ниже упомянутое решение, это поможет вам исправить это.

обновление 1 :

чтобы вызвать определенную группу, вы передадите ее имя в $this->form_validation->run('task') метод. Я не вижу никаких $config['task'] массив в коде. Пожалуйста, проверьте мой ниже упомянутый код и обновление на основе вашего inputs.

public function Task() {

    $config = array(
        'task' => array(
            array(
                'field' => 'username',
                'label' => 'Username',
                'rules' => 'required'
            ),
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required'
            )
    ));
    $this->load->library('form_validation');
    if ($this->form_validation->run('task') == FALSE) {
        $this->data['Task'] = $this->bm->get_usr();
        $data['title'] = "Add New Task";
        $this->load->view('Subadmin/header', $data);
        $this->load->view('Subadmin/nav');
        $this->load->view('Subadmin/sidebar');
        $this->load->view('Subadmin/task', $this->data);
        $this->load->view('Subadmin/footer');
    } else {
        $fconfig['upload_path'] = './taskimages/';
        $fconfig['allowed_types'] = 'gif|jpg|png';
        $fconfig['max_size'] = '10048';
        $fconfig['overwrite'] = FALSE;

        $this->load->library('upload', $fconfig); //Load the upload CI library
        $this->load->initialize($fconfig);

        if (!$this->upload->do_upload('my_image')) {
            $error = array('error' => $this->upload->display_errors());
            $this->load->view('form' ,$error);
        } else {
            $file_info = $this->upload->data();
            $file_name = $file_info['my_image'];
            $data = array(
                'Job_Title' => $this->input->post('jtitle'),
                'Priority' => $this->input->post('jnature'),
                'Assignee' => $this->input->post('assigne'),
                'Employee_Name' => $this->input->post('assignto'),
                'Due_Date' => $this->input->post('ddate'),
                'Reminder' => $this->input->post('reminder'),
                'Task_Image' => $file_name,
            );

            $this->bm->add_task($data);

            $data['upload_data'] = array('upload_data' => $this->upload->data());
            $this->load->view('YOUR_SUCCESS_VIEW PAGE', $data);
        }
    }
}

Дайте мне знать, если он не работает.


как о Класс Загрузки Файлов от CI?

проверки, также доступны в классе:

$config['allowed_types']        = 'gif|jpg|png';
$config['max_size']             = 100;
$config['max_width']            = 1024;
$config['max_height']           = 768;

ссылка включает в себя форму загрузки, страницу успеха и контроллер.

просто следуйте инструкциям, и вы никогда не будете теряться.


Я использую этот код для загрузки нескольких изображений. Теперь попробуйте ниже кода, надеюсь, это поможет.

 public function __construct(){
        parent::__construct();

        $this->load->helper('date');
        $this->load->helper('url');
        $this->load->helper('form');
        $this->load->helper('html');
        $this->load->library('form_validation');
        $this->load->library('email');
        $this->form_validation->set_error_delimiters('', '');
        $config['allowed_types'] = 'jpeg|jpg|png|bmp';
        $this->load->library('upload', $config);
        $this->load->library('session');

    }



 public function Task() {
        if ($this->form_validation->run('Sub_Admin/task') == FALSE) {
            $this->data['Task'] = $this->bm->get_usr();
            $data['title'] = "Add New Task";
            $this->load->view('Subadmin/header',$data);
            $this->load->view('Subadmin/nav');
            $this->load->view('Subadmin/sidebar');
            $this->load->view('Subadmin/task', $this->data);
            $this->load->view('Subadmin/footer');
        } else {

            $filesCount = count($_FILES['file']['name']);
            $result     = '';
            if($filesCount > 0) {
                $event_id     = trim($this->input->post('event_name'));
                for($i = 0; $i < $filesCount; $i++) {

                    $_FILES['gallery']['name']      = $_FILES['file']['name'][$i];
                    $_FILES['gallery']['type']      = $_FILES['file']['type'][$i];
                    $_FILES['gallery']['tmp_name']  = $_FILES['file']['tmp_name'][$i];
                    $_FILES['gallery']['error']     = $_FILES['file']['error'][$i];
                    $_FILES['gallery']['size']      = $_FILES['file']['size'][$i];

                    $image = $_FILES['gallery']['name'];
                    $directoryPath = date('Y/M/');

                    $path_info = pathinfo($image);
                    //check file type valid or not
                    if(in_array($path_info['extension'], array('jpg', 'jpeg','png', 'gif','JPG','JPEG'))){
                        // Upload job picture
                        $random = time();
                        $config['upload_path']   = './taskimages/';
                        $config['allowed_types'] = 'jpg|png|jpeg|bmp';
                        $config['file_name']     = $random;
                        $config['encrypt_name']  = TRUE;
                        $config['max_size']      = '250000000';
                        $config['max_width']     = '75000000';
                        $config['max_height']    = '7500000';

                        $this->load->library('upload', $config);
                        $this->upload->initialize($config);

                        ini_set('upload_max_filesize', '10M');
                        ini_set('memory_limit', '-1');

                        if ($this->upload->do_upload('gallery')) {

                            $imageArray = $this->upload->data();
                            $image_name = $imageArray['raw_name'] . '' . $imageArray['file_ext']; // Job Attachment

                            $config1['image_library'] = 'gd2';
                            $config1['source_image'] = './taskimages/' . $image_name;
                            $config1['create_thumb'] = TRUE;
                            $config1['maintain_ratio'] = TRUE;
                            $config1['width'] = 620;
                            $config1['height'] = 540;

                            $this->load->library('image_lib', $config);
                            $this->image_lib->initialize($config1);
                            $this->image_lib->resize();
                            $this->image_lib->clear();


                            $file_name = $image_name_thumb = $imageArray['raw_name'] . '_thumb' . $imageArray['file_ext'];
                            $data = array(
                                'Job_Title' => $this->input->post('jtitle'),
                                'Priority' => $this->input->post('jnature'),
                                'Assignee' => $this->input->post('assigne'),
                                'Employee_Name' => $this->input->post('assignto'),
                                'Due_Date' => $this->input->post('ddate'),
                                'Reminder' => $this->input->post('reminder'),
                                'Task_Image' => $file_name,
                            );

                            $this->bm->add_task($data);
                        }
                    }
                }
            }
        }
    }

здесь я пишу только примеры файлов выгрузки. Изменить его согласно вашему требованию. контроллер/файлы.в PHP

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Files extends CI_Controller {

function __construct() {
    parent::__construct();
}

public function upload(){
    $data = array();

    $this->load->library('form_validation');
    $this->load->helper('file');

    $this->form_validation->set_rules('task', '', 'callback_file_check');

    if($this->form_validation->run() == true){
        //upload configuration
        $config['upload_path']   = 'uploads/files/';
        $config['allowed_types'] = 'gif|jpg|png|pdf';
        $config['max_size']      = 1024;
        $this->load->library('upload', $config);
        //upload file to directory
        if($this->upload->do_upload('task')){
            //YOU CAN DO WHAT DO THE PROCESS
        }else{
            $data['error_msg'] = $this->upload->display_errors();
        }
    }        
    //load the view
    $this->load->view('upload_view', $data);
}

public function file_check($str){
    $allowed_mime_type_arr = array('application/pdf','image/gif','image/jpeg','image/pjpeg','image/png','image/x-png'); //HERE you CAN GIVE VALID FILE EXTENSION
    $mime = get_mime_by_extension($_FILES['task']['name']);
    if(isset($_FILES['task']['name']) && $_FILES['task']['name']!=""){
        if(in_array($mime, $allowed_mime_type_arr)){
            return true;
        }else{
            $this->form_validation->set_message('file_check', 'Please select only pdf/gif/jpg/png file.');
            return false;
        }
    }else{
        $this->form_validation->set_message('file_check', 'Please choose a file to upload.');
        return false;
    }
}
}
?>

посмотреть/upload_view.в PHP

<?php 
if(!empty($success_msg)){
    echo '<p class="statusMsg">'.$success_msg.'</p>';
}elseif(!empty($error_msg)){
    echo '<p class="statusMsg">'.$error_msg.'</p>';
}
?>

<form method="post" enctype="multipart/form-data" action="<?php echo base_url(); ?>files/upload">
   <p><input type="task" name="task"/></p>
   <?php echo form_error('task','<p class="help-block">','</p>'); ?>
   <p><input type="submit" name="uploadFile" value="UPLOAD"/></p>
</form>

попробуй такое

public function add_partner()
{ 
     $config =[
    'upload_path'    =>   './uploads_image',
    'allowed_types'  =>   'jpg|gif|png|jpeg',//Image allowed Type
              ]; 
     $this->load->library('upload',$config);//load image liabrary
     $post=$this->input->post();
     if($this->form_validation->run('partner') && $this->upload-
     >do_upload('userfile'))
     {    
       $data = $this->upload->data();
       $image_path = ("uploads_image/" .$data['raw_name'] . $data['file_ext']);
       $post['partner_image'] = $image_path; //partner_image tabelfield name

       unset($post['submit']);
       $this->partner_model->add_partner($post);//data to model
     }
     else
     {       
       $upload_error= $this->upload->display_errors();        
       $this->load->view('admin/add_partner',['upload_error'=>$upload_error]);
     } 
}
In view 
<div class="row">
   <div class="col-lg-8">
      <div class="form-group">
         <label for="image" class="col-lg-5 control-label"> Upload Image<span style="color:red;">*</span></label>
         <div class="col-lg-7"> <?php echo form_upload(['name'=>'userfile','class'=>'form-control','data-max-size'=>' 2048','value'=>set_value('userfile')]); ?> </div>
      </div>
   </div>
   <div class="col-lg-4"> <?php if(isset($upload_error)) echo $upload_error; ?> </div>
</div>

вы не получаете ошибку, используя класс загрузки CI, потому что вы не вызываете ошибку meothod из него. Измените код обновления 2, как показано ниже

public function Task()
{
    if ($this->form_validation->run('Sub_Admin/task') == FALSE) {
        $this->data['Task'] = $this->bm->get_usr();
        $data['title'] = "Add New Task";
        $this->load->view('Subadmin/header',$data);
        $this->load->view('Subadmin/nav');
        $this->load->view('Subadmin/sidebar');
        $this->load->view('Subadmin/task', $this->data);
        $this->load->view('Subadmin/footer');
    }
    else
    {

        $config['upload_path'] = './taskimages/'; //The path where the image will be save
        $config['allowed_types'] = 'gif|jpg|png'; //Images extensions accepted
        $config['max_size'] ='10048'; //The max size of the image in kb's
        //$config['max_width']  = '1024'; //The max of the images width in px
        //$config['max_height']  = '768'; //The max of the images height in px
        $config['overwrite'] = FALSE; //If exists an image with the same name it will overwrite. Set to false if don't want to overwrite
        $this->load->library('upload', $config); //Load the upload CI library
        $this->load->initialize($config);
        if ( ! $this->upload->do_upload('task'))
        {       
                $upload_error = $this->upload->display_errors(); //Here you will get errors. You can handle with your own way
                echo $upload_error; //<------------you can echo it for debugging purpose
                $data['error'] = $upload_error; //<-------------you can send it in view to display error in view.
                $this->load->view('your_view' ,$data); //<---pass data to view
        }
        else
        {
            $file_info = $this->upload->data();
            $file_name = $file_info['file_name'];
            $data = array(
                'Job_Title' => $this->input->post('jtitle'),
                'Priority' => $this->input->post('jnature'),
                'Assignee' => $this->input->post('assigne'),
                'Employee_Name' => $this->input->post('assignto'),
                'Due_Date' => $this->input->post('ddate'),
                'Reminder' => $this->input->post('reminder'),
                'Task_Image' => $file_name,
            );

            $this->bm->add_task($data);
        }



    }
}

в виде

echo (isset($error))?$error:"";