0

私が使用しているフォームには、5 人の情報が含まれています。必要に応じて、ユーザーは 5 人のそれぞれの写真をアップロードできます。画像がアップロードされていない結果の配列 $files にデフォルトの画像を挿入しようとしています。助けていただければ幸いです。

function multiple_upload($upload_dir = APPPATH, $config = array())
{
    $CI =& get_instance();
    $files = array();

    if(empty($config))
    {
        $config['upload_path']   = realpath($upload_dir . '/uploads');
        $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png';
        $config['max_size']      = '2048';
    }

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

    $errors = FALSE;
    $this->load->library('image_lib');  // moved outside loop so it'll work
    foreach($_FILES as $key => $value)
    {
        if( ! empty($value['name']))
        {
            if( ! $CI->upload->do_upload($key))
            {
                $data['upload_message'] = $CI->upload->display_errors(ERR_OPEN, ERR_CLOSE); // ERR_OPEN and ERR_CLOSE are error delimiters defined in a config file
                $CI->load->vars($data);

                $errors = TRUE;
            }
            else
            {

                // resize the saved image
                $path = $CI->upload->data('full_path');
                //echo $path['full_path'] . "<Br/>";
                $config = array(
                    'source_image' => $path['full_path'],
                    'new_image' => $upload_dir . 'uploads/thumbs',
                    'maintain_ration' => true,
                    'width' => 150,
                    'height' => 150
                );

                $this->image_lib->initialize($config);
                $this->image_lib->resize();
                // Build a file array from all uploaded files
                $files[] = $CI->upload->data();


            }
        }
    }

    // There was errors, we have to delete the uploaded files
    if($errors)
    {
        foreach($files as $key => $file)
        {
            @unlink($file['full_path']);
        }
    }
    elseif(empty($files) AND empty($data['upload_message']))
    {
        $CI->lang->load('upload');
        $data['upload_message'] = ERR_OPEN.$CI->lang->line('upload_no_file_selected').ERR_CLOSE;
        $CI->load->vars($data);
    }
    else
    {

        return $files;

    }

}
4

1 に答える 1

0

アップロードされたファイルを検証した後で、チェックを行う方が簡単な場合があります。

例: 各画像に 1 つずつ、5 つの空の要素で配列を初期化し、アップロードされた各ファイルのファイル名を適切な配列要素に設定します。完了したら、実行して空の要素がある場合は、ファイル (またはファイル パス) を既定の画像に追加します。

このようにして、ファイルのアップロードと検証を可能な限り平凡に保ち、ページのビジネス ロジックを個別に処理します。

于 2012-09-07T02:20:50.580 に答える