0

以下の関数を使用して、画像ファイルをサーバー (Localhost) にアップロードしています。無事、画像アップ中です。しかし、2 つの画像フィールドが必要なため、送信ボタンをクリックすると両方の画像をアップロードする必要があります。ここで説明されている機能Codeigniter 複数ファイルのアップロードを使用しましたが、機能していません。

このエラーメッセージが表示されます

A PHP Error was encountered

Severity: Warning

Message: is_uploaded_file() expects parameter 1 to be string, array given

Filename: libraries/Upload.php

Line Number: 161

エラーがどこにあるのかわかりません。単一の画像をアップロードするために使用している機能は

function do_upload()
    {
        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'jpeg|png|gif';
        $config['max_size'] = '0';
        $config['max_width']  = '0';
        $config['max_height']  = '0';

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

        if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());
           //failed display the errors
        }
        else
        {
            //success

        }
    }

さらに、選択した入力フィールド名を変更できますか?つまり、常に実装する必要があります<input type="file" name="userfile"/>。名前を変更することは可能ですか?変更しようとしたところ、No file was selectedというメッセージが表示されたので、変更できないことを意味しているに違いありません。

4

2 に答える 2

5

提供されたリンクに示されているように、アップロードされたファイルをループする必要があります。

function do_upload() {
        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'jpeg|png|gif';
        $config['max_size'] = '0';
        $config['max_width']  = '0';
        $config['max_height']  = '0';

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

        foreach ($_FILES as $key => $value) {

            if (!empty($value['tmp_name'])) {

                if ( ! $this->upload->do_upload($key)) {
                    $error = array('error' => $this->upload->display_errors());
                    //failed display the errors
                } else {
                    //success
                }

            }
        }
}

そして、次のような HTML を使用してみてください。

<input type="file" name="file1" id="file_1" />
<input type="file" name="file2" id="file_2" />
<input type="file" name="file3" id="file_3" />

入力フィールドの名前は自由に変更できます。

于 2013-02-13T21:15:50.917 に答える
0

ファイルの複数選択を使用している場合は、次のようにします。

HTML (配列名を使用した HTML5 ファイル入力により、複数のファイルを選択できます):

<input type="file" name="userfile[]"/>

また

<input type="file" name="userfile[]"/>
<input type="file" name="userfile[]"/>

CodeIgniter の PHP:

// load upload library (put your own settings there)
$this->load->library('upload', array('allowed_types' => 'svg|gif|jpg|png', 'upload_path' => $GLOBALS['config']['upload_path'], ));

// normalise files array
$input_name = 'userfile'; // change it when needed to match your html
$field_names = array('name', 'type', 'tmp_name', 'error', 'size', );
$keys = array();
foreach($field_names as $field_name){
    if (isset($_FILES[$input_name][$field_name])) foreach($_FILES[$input_name][$field_name] as $key => $value){
        $_FILES[$input_name.'_'.$key][$field_name] = $value;
        $keys[$key] = $key;
    }
}
unset($_FILES[$input_name]); // just in case

foreach ($keys as $key){

    $new_file = $this->upload->do_upload($input_name.'_'.$key);

    // do your stuff with each uploaded file here, delete for example:
    $upload_data = $this->upload->data();
    unlink($upload_data['file_name']);

}
于 2016-04-29T17:06:24.473 に答える