我正在使用下面的功能将我的图像文件上传到我的服务器(Localhost)。很好,图像正在上传。但是我需要两个图像字段,因此一旦点击提交按钮,就应该上传两个图像。我使用了此处描述的功能 Codeigniter multiple file upload ,但它无效。
我收到此错误消息
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"/>
。是否可以更改名称?我尝试更改它并收到消息没有选择文件,所以这必须意味着我无法更改它。
答案 0 :(得分: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" />
您可以根据需要更改输入字段的名称。
答案 1 :(得分: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']);
}