1

CodeIgniter で複数のファイル アップロード モジュールを使用しています。スクリプトは完全に成功しています。単なるエラーです。ばかげたエラーが発生している可能性があります。

まず、コンセプトを共有したいと思います。人々が電子メールIDを使用して登録しているWebサイトでは、電子メールIDを使用して登録しているときに、その人のフォルダが電子メールIDの名前でサーバーに作成されます。メール IDsaswat.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番目のインデックス名に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);
}
}
于 2014-07-31T11:34:38.737 に答える
-1

フォルダ名になります。

代わりに、フォルダ名にユーザー ID を使用できますか?

例えば

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

それ以外の場合は、フォルダ名で許可されていないすべての文字を電子メールから削除する必要があります (これは OS によって異なります)。

于 2013-01-30T13:34:31.440 に答える