1

我在 CodeIgniter 中使用多文件上传模块;脚本完全成功,只是一个简单的错误,可能是一个愚蠢的错误正在发生。

首先我想分享一个概念。在一个网站中,人们现在使用他们的电子邮件 ID 进行注册,当人们使用电子邮件 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];

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

4

2 回答 2

0

你不能上传为

foreach($_FILES['photo']['name'] as $key=>$val){ }

你应该使用

print_r($_FILES['photo']['name']);
die();

要了解找到的数组。它不是你想的那样,在这种情况下,它在第 0 个索引名称中返回一个二维数组,在第一个索引中返回一个包含进一步索引号的数组。和图像的名称。您应该将此数组拆分为一个 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);
}
}
于 2014-07-31T11:34:38.737 回答
-1

这将是文件夹名称。

您可以使用用户 ID 作为文件夹名称吗?

例如

$image= $_SESSION['user_id'].'/'.md5(uniqid(rand())).$_FILES['photo']['name'][$key];

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

于 2013-01-30T13:34:31.440 回答