文件上传CI中的错误

时间:2013-01-30 12:51:56

标签: image codeigniter file-upload

我在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];

然后文件完全上传。这意味着它只是导致错误的文件夹名称,但我需要以这种方法上传文件。

2 个答案:

答案 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];

否则,您需要删除其电子邮件中文件夹名称中不允许的所有字符(取决于操作系统)。