0

これは、コードイグナイターでやろうとしていることです:

メンバーのプロフィール ページには、それぞれ独自の写真ギャラリーがあります。ユーザーはログインして写真をアップロードできます。写真をユーザー名のフォルダー内に配置したい。そのため、ユーザーのディレクトリが存在しない場合は、写真をアップロードしたときにディレクトリを作成したいと考えています。最後に、アップロードした写真をそのユーザーに関連付けて、そのユーザーのプロフィール ページに表示したいと考えています。

私が働いているもの:

写真をアップロードすることはできますが、通常のアップロード フォルダー内にあり、その写真に関連するデータベース内のファイル名も確認でき、ファイルを表示できます。

ユーザー名または ID を持つフォルダー内にユーザーの写真を作成する必要があります。ユーザーの写真のみが彼のページに表示されます。ここに私のギャラリーモデルがあります:

<?php

class Gallery_model extends CI_Model{
    // initalizes the gallery path variable
    var $gallery_path;
    var $gallery_path_url;
    public function __construct(){
        parent::__construct();
        //sets the gallery path to applications folder and gallery image path
        $this->gallery_path = realpath(APPPATH . '../portfolio');
        $this->gallery_path_url = base_url().'portfolio/';
    }

    function do_upload(){

        $config = array(
            // requried variable allowed types is needed also delcared the upload path to gallery path
            'allowed_types' => 'jpg|jpeg|gif|png',
            'upload_path' => $this->gallery_path,
            'max_size' => 3000
        );

        // loads the library and sets where its going to go to
        $this->load->library('upload',$config);
        // this performs the upload operation

        $this->upload->do_upload();
        //returns data about upload ( file location )
        $image_data = $this->upload->data();

        $config = array(
            'source_image' => $image_data['full_path'],
            'new_image' => $this->gallery_path . '/thumbs',
            'maintain_ration' => true,
            'width' => 250,
            'height' => 220
        );



        $data = array(
          'username' => $this->input->post('username'),
          'category' => $this->input->post('category'),
          'filename' => $image_data['file_name'],
        );

        $this->db->insert('portfolio', $data );

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

    }
    function get_images(){

        $files = scandir($this->gallery_path);
        // substracts these out of array
        $files = array_diff($files, array('.', '..','thumbs'));
        $images = array();

        foreach ($files as $file){
            $images [] = array(
                'url' => $this->gallery_path_url . $file,
                'thumb_url' => $this->gallery_path_url . 'thumbs/' .$file
            );
        }
        return $images;
    }
}

ここに私の見解があります:

        function gallery(){
        $this->load->model('user_model');
        $data = array(
            //$session_id = $this->session->userdata('session_id')
        ); // if no data is there and you wont get an error
            if($query = $this->user_model->get_profile())
        {
            $data['records'] = $query;


        }
        // loads the model. if the upload posts, call the do model method from the gallery model Model.
        $this->load->model('gallery_model');
        if ($this->input->post('upload')){
            $this->gallery_model->do_upload();
        }
        // displays the images
        $data['images'] = $this->gallery_model->get_images();

        $data['main_content'] = '/pages/gallery';
        $this->load->view('templates/template',$data);
    }
4

1 に答える 1

0

アップロード ライブラリの "file_name" 構成変数を見逃したため、ポートフォリオ フォルダーに元のファイル名が表示されます。例:

$config = array(
  // requried variable allowed types is needed also delcared the upload path to gallery path
    'allowed_types' => 'jpg|jpeg|gif|png',
    'upload_path' => $this->gallery_path,
    'max_size' => 3000,
    'file_name' => "the user id or username"
);

また、「上書き」変数が設定されていないこともわかります。ユーザーが新しい写真をアップロードするときにCIがファイルを上書きしないため、ファイル名をユーザー名として保存しているため、問題になる可能性があります。

于 2013-07-27T05:26:16.913 に答える