2012-03-28 11 views
3

ビューで複数の画像をアップロードしようとすると、私は、ユーザーが一度に複数の画像をアップロードできるようにしたい。このCodeIgniterの&HTML5は - 一度

<?=form_open_multipart('upload/process');?> 
     <input type="file" multiple="multiple" name="userfile[]" id="userfile" /> 
     <?=form_submit('upload', 'Upload');?> 
    <?=form_close();?> 

のように見えます。一旦アップロードされると、データベースに画像の詳細を入力し、最後に画像をuploadsフォルダに移動したいと思います。

私はCodeIgniterの

PSの基本的な知識を持っている:私はuploadify使用するか、または類似した画像アップロードプラグインしたくありません。これは私がのvar_dump($ _ FILES [「userfileを」])しようとしたとき、私は取得しています配列の一種である 更新可能

として軽量としてそれを維持しようとしています。それぞれの画像のデータを分離するためにどのようなループを使用すべきですか?

array 
    'name' => 
    array 
     0 => string '01.jpg' (length=6) 
     1 => string '1 (26).jpg' (length=10) 
    'type' => 
    array 
     0 => string 'image/jpeg' (length=10) 
     1 => string 'image/jpeg' (length=10) 
    'tmp_name' => 
    array 
     0 => string 'C:\wamp\tmp\php2AC2.tmp' (length=23) 
     1 => string 'C:\wamp\tmp\php2AD3.tmp' (length=23) 
    'error' => 
    array 
     0 => int 0 
     1 => int 0 
    'size' => 
    array 
     0 => int 409424 
     1 => int 260343 
+0

あなたはどんな問題を抱えていますか? – Shomz

+0

私は基本的な複数のイメージアップローダーをビルドしたいと思っています。 – user1295342

+0

私は正確に何が問題なのか、何を試していたのかなどを意味しました...しかし、大丈夫です。あなたがそこからそれを解決できるかどうかを見てください。 – Shomz

答えて

8

この問題も同様に発生しました。 $_FILESのデータにはdiffent構造(multiple=""属性)が送信されるため、codeigniterはそれを処理できません。前に付加アップロード処理の前に、この:

$arr_files = @$_FILES['userfile']; 

$_FILES  = array(); 
foreach(array_keys($arr_files['name']) as $h) 
$_FILES["file_{$h}"] = array( 'name'  => $arr_files['name'][$h], 
            'type'  => $arr_files['type'][$h], 
            'tmp_name' => $arr_files['tmp_name'][$h], 
            'error'  => $arr_files['error'][$h], 
            'size'  => $arr_files['size'][$h]); 

そして、ループ機能を使用しているこの:

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

$arr_config = array( 'allowed_types' => 'gif|jpg|png', 
          'upload_path' => 'url_path/'); 

foreach(array_keys($_FILES) as $h) { 

    // Initiate config on upload library etc. 

    $this->upload->initialize($arr_config); 

    if ($this->upload->do_upload($h)) { 

     $arr_file_data = $this->upload->data(); 

    } 

} 

説明:
私は単純に送信される共通の構造へ$_FILESの構造を変更しますデフォルトは<input type="file" />で、ループを実行してすべてのキー名を取得します。

+0

続行する前にアップロードされたデータに対してvar_dump()を取得する方法 – user1295342

+0

Codeigniterでアップロードしたときに作成される$ _FILESデータまたはデータに関する情報が必要ですか? –

+0

データに関する問題が解決されました。今、私はちょうど私が配列から情報を抽出するために使用する必要があるループにしたい(更新で提供) – user1295342

1

ループは、次のものが必要です。私は通常の代わりにCIのクラスで動作するように簡単に見つける

for($i=0; $i<count($_FILES['name']); $i++){ 
    if ($_FILES['error'][$i] == 0) { 
     //do your stuff here, each image is at $_FILES['tmp_name'][$i] 
    } 
} 

CIアップロードクラスを使用していないことに注意してくださいが、プレーンなPHPを。

+0

CIライブラリ/ヘルパーは生のPHPですが、特定の機能をどのように行ったのかを見るためにCIファイルを調べるのではなく、自分のコードで叩くのが簡単で速いことがあります。 +1 – Philip

+3

ええ、CIのファイルアップロードクラスは、より汎用的に拡張/改良する必要があります...しかし、最も基本的な使用のために素晴らしい仕事をします。 – Shomz