0

このページの @raheel shan のスレッドを参照し、このMy_Upload拡張ライブラリを使用してif(!$this->upload->validate_upload('photo'))入力ファイルを検証しました。ユーザーが無効なファイル タイプをアップロードしようとすると、検証は正常に機能し、メッセージは適切な場所に表示されます。

どういうわけか、画像ファイルをそのフォルダーにアップロードできず、ファイル名をテーブルに保存できません。このライブラリを使用する前に、画像ファイルをアップロードしてテーブルに保存するというかなりの作業がありました。

誰かが私のコードの何が問題なのかを理解するのを手伝ってもらえますか?

コントローラ:

public function index()
{
    if(!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login');

    }else{

        $user_id = $this->session->userdata('user_id');
        $profile = $this->users->get_profile_by_id($user_id);
        $checked = $this->input->post('remove');

        $this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean|min_length[5]|max_length[30]');
        $this->form_validation->set_rules('country', 'Country', 'trim|required|xss_clean');
        $this->form_validation->set_rules('website', 'Website', 'trim|xss_clean|max_length[30]');


        if(isset($_FILES['photo']) AND !empty($_FILES['photo']['name'])) {

            $this->form_validation->set_rules('photo', 'Photo', 'trim|callback_valid_upload');

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

                // image resizing
                $config['source_image'] = $this->upload->upload_path.$this->upload->file_name;
                $config['maintain_ratio'] = TRUE;
                $config['width'] = 100;
                $config['height'] = 100;

                $this->load->library('image_lib', $config); //codeigniter default function

                if(!$this->image_lib->resize()){

                    $this->session->set_flashdata('upload_msg', $this->image_lib->display_errors());

                }else{

                    $image_data = $this->upload->data();
                    $photo_to_table = $image_data['file_name'];
                }

            }

        }else{

            if((int) $checked == 1){

                unlink('./uploads/'.$profile->photo);
                $photo_to_table = '';

            }else{
                $photo_to_table = $profile->photo;
            }
            //$photo_to_table = ((int) $checked == 1) ? '' : $profile->photo;
        }

        if($this->form_validation->run()) { // validation ok

            if(!is_null($data = $this->tank_auth->update_user(
                $this->form_validation->set_value('name'),
                $this->form_validation->set_value('country'),
                $this->form_validation->set_value('website'),
                $photo_to_table
            ))) { // success

                $this->session->set_flashdata('msg', 'Profile has been updated');
                redirect(current_url());
            }

        }else{

            $errors = $this->tank_auth->get_error_message();
            foreach($errors as $k => $v) $data['errors'][$k] = $this->lang->line($v);
        }

//blah blah..//load view

}

public function valid_upload()
{
    $user_id = $this->session->userdata('user_id');

    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'gif|jpg|jpeg|png';
    $config['max_size'] = '500';
    $config['file_name'] = $user_id.'_'.strtotime('now');
    $config['overwrite'] = TRUE;
    $config['remove_spaces'] = TRUE;

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

    if(!$this->upload->validate_upload('photo'))
    {
        $this->form_validation->set_message('valid_upload', $this->upload->display_errors());
        return FALSE;
    }else{
        return TRUE;
    }
}


 }

ありがとう。

4

2 に答える 2

1

同様の問題がありましたが、私の場合は、間違った画像ライブラリを選択したことが原因でした。使用する適切なイメージ ライブラリの PHP インストールを確認し、一致することを確認します。デフォルトでは、CodeIgniter はデフォルトのイメージ ライブラリとして GD2 (GD ライブラリ バージョン >= 2) を選択します。
http://ellislab.com/codeigniter/user-guide/libraries/image_lib.html

これを試して:

// image resizing
$config['image_library'] = 'gd'; // specify the correct image library
$config['source_image'] = $this->upload->upload_path.$this->upload->file_name;
$config['maintain_ratio'] = TRUE;
$config['width'] = 100;
$config['height'] = 100;
于 2013-09-28T16:04:17.647 に答える
0

あなたの結果は何ですか

$this->image_lib->display_errors()

アップロード ディレクトリは書き込み可能ですか?

GD がインストールされ、php でアクティブになっていますか? Mahmoudが提案したように、GDを試してみてください。

于 2013-09-29T15:33:25.890 に答える