1

私はユーザーがcsvファイルをアップロードできるphpでウェブサイトを開発しています。「アップロード」ボタンをクリックすると、ファイルの名前が変更され、「upload」.time()の形式で保存されます。ファイルをアップロードした直後に、アップロードしたファイルの内容を表示する必要があります。これまでのところ、ファイルを正しくアップロードでき、静的ファイル名でテストし、csvファイルを完全に読み取ることができました。しかし、アップロードした直後に最近アップロードされたファイル名を取得しようとすると、どこにも取得できません。サイト全体を検索しましたが、私に役立つ解決策は見つかりませんでした。codeigniter2.1.0を使用しています。

コントローラファイル:

<?php     
class Csv_ci extends CI_Controller {

function is_logged() {
    $is_logged_in = $this->session->userdata('is_logged_in');
    if (!isset($is_logged_in) || $is_logged_in != true)
        return false;
    else
        return true;
}

function index() {
    if ($this->is_logged() == TRUE) {
        $this->load->model('Csv_model');

        if ($this->input->post('upload')) {
            $name = $this->Csv_model->do_upload();
            //print_r($name);
            if (isset($name)) {
                $filePath = "localhost/map_ci/csv/" . $name;
                //$filePath = './csv/bank_data.csv';
                $row = 1;
                if (($handle = fopen($filePath, "r")) !== FALSE) {
                    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
                        $num = count($data);

                        $file_data[$row]['district_name'] = $data[1];
                        $file_data[$row]['bank_name'] = $data[2];
                        $file_data[$row]['area_name'] = $data[3];
                        $file_data[$row]['address'] = $data[4];
                        $row++;
                    }

                    fclose($handle);
                }
                $this->load->view('csvshow', array('file_data' => $file_data));
            }
        }
    }
    else $this->load->view('invalid_member');
     }
}

モデルファイル:

 <?php

class Csv_model extends CI_Model {

var $gallery_path;
var $gallery_path_url;

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


    $this->gallery_path = realpath(APPPATH . '../csv');
    $this->gallery_path_url = base_url() . 'csv/';
}

function do_upload() {
    $config = array(
        'upload_path' => $this->gallery_path,
        'allowed_types' => 'text/csv|csv|text/x-comma-separated-values|text/comma-separated-values|application/x-csv|text/x-csv|text/csv|application/csv|',
        'max_size' => '5000',
        'file_name' => 'upload' . time()
    );


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

    if (!$this->upload->do_upload())
        echo $this->upload->display_errors();
    else {
        $file_info = $this->upload->data();
        $csvfilepath = "csv/" . $file_info['file_name'];
        $this->addfromcsv($csvfilepath);
        $filename = $file_info['file_name'];
        // print_r($filename);
        return $filename;
    }
} 
}

私がやっているファイル名を取得するには file_info['file_name']。解決策を見つけるのを手伝ってください。

更新:コードからこれらの2行を削除した後、現在の問題は解決され$csvfilepath = "csv/" . $file_info['file_name']; $this->addfromcsv($csvfilepath);ました。アップロードされたファイル名が返されますが、完全に機能しているかどうかを確認します。

アップデート2:コードがうまく機能しているすべての人の助けに感謝します。

4

4 に答える 4

2

$config['upload_path']$config['file_name']fromの連結を返し、do_upload()それを使用して対応するファイルを読み取ることができます。

于 2012-07-07T07:37:36.973 に答える
0
$data = $this->upload->data();
print_r($data);

戻り値:

Array
(
[file_name]    => mypic.jpg
[file_type]    => image/jpeg
[file_path]    => /path/to/your/upload/
[full_path]    => /path/to/your/upload/jpg.jpg
[raw_name]     => mypic
[orig_name]    => mypic.jpg
[client_name]  => mypic.jpg
[file_ext]     => .jpg
[file_size]    => 22.2
[is_image]     => 1
[image_width]  => 800
[image_height] => 600
[image_type]   => jpeg
[image_size_str] => width="800" height="200"
)`

それで:$file_name = $data['file_name'];

-また-

$file = $data['file_path'].$data['file_name'];

于 2012-07-07T20:36:12.457 に答える
0

問題はにあると思います$this->upload->data()

$config['file_name']から戻ってみてくださいdo_upload()

于 2012-07-07T10:45:21.583 に答える
0

使用するだけです:

$this->upload->file_name;
于 2012-07-08T07:53:45.617 に答える