我在CodeIgniter中使用多个文件上传模块;脚本是完全成功的,只是一个简单的错误,可能是一个愚蠢的发生。
首先,我想分享一个概念。在一个网站上,当人们使用电子邮件ID注册时,人们正在使用他们的电子邮件ID注册,该人的文件夹通过电子邮件ID的名称在服务器中创建。假设我通过电子邮件标识saswat.saz.routroy@gmail.com
在网站中注册,然后当我以$_SESSION['logged_user']="saswat.saz.routroy@gmail.com"
开始登录会话时。
再次注册时,会在服务器中创建一个名为saswat.saz.routroy@gmail.com
的文件夹。现在我想将图像上传到文件夹" saswat.saz.routroy@gmail.com"。
我正在使用脚本
foreach($_FILES['photo']['name'] as $key=>$val)
{
if($_FILES['photo']['name'][$key]=="")
{
//return "Successfully Added";
}
else if($_FILES['photo']['name'][$key]!='' && ($_FILES['photo']['type'][$key]='jpeg'
|| $_FILES['photo']['type'][$key]='jpg' || $_FILES['photo']['type'][$key]='JPG'
|| $_FILES['photo']['type'][$key]='JPEG') )
{
$f_name=$_FILES['photo']['name'][$key];
$s_name=array();
$s_name=explode('.',$f_name);
$name=$s_name[0];
$name="(".$order_date.")".$name;
$slug= $name;
$slug = trim($slug," ");
$slug = trim($slug,"-");
$slug=str_replace(" ", "-", $slug);
$slug=str_replace("/", "-", $slug);
$slug=str_replace("|", "-", $slug);
$slug=str_replace("!", "-", $slug);
$slug=str_replace("+", "-", $slug);
$slug=str_replace("*", "-", $slug);
$data = array(
'photo_id' => NULL,
'order_id' => $last_order_id,
'user_id' => $user_id,
'photo_name'=>$name,
'photo_folder'=>$_SESSION['logged_user'],
'order_date'=>$order_date
);
if($this->db->insert('photo_table', $data))
{
$last_id=mysql_insert_id();
$slug= $last_id."-".$slug;
$this->db->query("UPDATE photo_table
SET photo_slug='$slug' WHERE photo_id='$last_id'");
}
$image= $_SESSION['logged_user'].'/'.md5(uniqid(rand())).$_FILES['photo']['name'][$key];
$img="./".$image;
move_uploaded_file($_FILES['photo']['tmp_name'][$key],$img);
$fullpath=$image;
$this->db->query("UPDATE photo_table
SET photo_path='$fullpath' WHERE photo_id='$last_id'");
}
}
return "Successfully Uploaded";
$_SESSION['logged_user']="saswat.saz.routroy@gmail.com"
。现在,这个脚本没有给出任何错误,但仍然没有上传文件,尽管数据库正在按原样更新。
但是如果我使用脚本:
$image= 'photo_folder/'.md5(uniqid(rand())).$_FILES['photo']['name'][$key];
而不是
$image= $_SESSION['logged_user'].'/'.md5(uniqid(rand())).$_FILES['photo']['name'][$key];
然后文件完全上传。这意味着它只是导致错误的文件夹名称,但我需要以这种方法上传文件。
答案 0 :(得分:0)
您无法上传为
foreach($_FILES['photo']['name'] as $key=>$val){ }
你应该使用
print_r($_FILES['photo']['name']);
die();
了解找到的数组。 它不是你想的那样,在这种情况下它返回第0个索引名称中的2D数组,而在第1个索引中返回包含更多索引号的数组。和图像的名称。 您应该将此数组拆分为victuals数组以传入函数
do_upload();
这样
<?php
class Uploads extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
function do_upload($field="1")
{
$error_data=array();
$success_data=array();
$data = array();
$this->load->helper('url');
if($this->input->post("btn"))
{
$images = array();
$name=array();
$field=0;
$config['upload_path'] = dirname(__FILE__).'/../../assets/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
foreach ($_FILES["fileimage"]['name'] as $k=>$v)
{
$_FILES['images[]']['name']= $_FILES['fileimage']['name'][$k];
$_FILES['images[]']['type']= $_FILES['fileimage']['type'][$k];
$_FILES['images[]']['tmp_name']= $_FILES['fileimage']['tmp_name'][$k];
$_FILES['images[]']['error']= $_FILES['fileimage']['error'][$k];
$_FILES['images[]']['size']= $_FILES['fileimage']['size'][$k];
$field++;
$name[]=$_FILES['fileimage']['name'][$k];
if ( ! $this->upload->do_upload("images[]"))
{
$error_data[] = $this->upload->display_errors();
$success_data[]="";
}
else
{
$success_data[] = $this->upload->data();
$error_data[]="";
}
}
$data['name']=$name;
$data['error']=$error_data;
$data['success']=$success_data;
}
$data['field']=$field;
$this->load->view('upload_form',$data);
}
}
答案 1 :(得分:-1)
这将是文件夹名称。
您可以使用用户ID代替文件夹名称吗?
E.g。
$image= $_SESSION['user_id'].'/'.md5(uniqid(rand())).$_FILES['photo']['name'][$key];
否则,您需要删除其电子邮件中文件夹名称中不允许的所有字符(取决于操作系统)。