Я использую функцию ниже, чтобы загрузить мои файлы изображений на свой сервер (Localhost). Это нормально, и изображение загружается. Но мне нужно два поля изображения, и поэтому оба изображения должны быть загружены после нажатия кнопки отправки. Я использовал описанную здесь функцию 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"/>
. Можно ли изменить имя? Я попытался изменить его, и я получил сообщение. Не был выбран файл , так что это должно означать, что я не могу его изменить.
Вам нужно прокрутить загруженные файлы, как показано в вашей предоставленной ссылке.
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" />
Вы можете изменить имена полей ввода, как вам нравится.
Если вы используете многоэкранный файл, выполните следующие действия:
HTML (ввод файла HTML5 с именем массива позволяет выбирать несколько файлов):
<input type="file" name="userfile[]"/>
или
<input type="file" name="userfile[]"/> <input type="file" name="userfile[]"/>
PHP в CodeIgniter:
// 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']); }
с// 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']); }