0

私は codeigniter の初心者で、codeigniter フレームワークを使用して Web サイトを構築したいと考えています。最初から、データベース、検証、電子メール、セッションを使用できるように見え、次にファイルを添付して電子メールで送信しようとします:

$this->email->attach('/path/ofyour/constan/file.anything');

それもうまくいきます。

それはウェブサイトなので、クライアントにアップロードしたいファイルを選択してもらいたいです。私は多くの方法を試しましたが、それらの多くはファイルをサーバールートにアップロードしてfile_dataを取得し、file_data [file_patch]を使用するように指示しています

$this->email->attach('file_data[file_path]');

問題は:

  1. コードイグナイターは複数のデータをアップロードできないため、プラグインを使用する必要があります。私は試してみましたが、その痛み

  2. データをサーバー ルートにアップロードしてからメールにアップロードするのは効果的ではありませんか?

  3. アップロード ファイルの file_path を取得してメールで送信する方がよいのですが、どうすればよいでしょうか。

jquery mobile でビルドしましたが、どうすればよいですか?

アップデート

わかりました、uploadify を使用することにしました。すべての Web サイトを検索してから、ここで見つけました。私のコードは次のとおりです。

uploadify.php

<?php
/*
*   Functions taken from CI_Upload Class
*
*/
    
    function set_filename($path, $filename, $file_ext, $encrypt_name = FALSE)
    {
        if ($encrypt_name == TRUE)
        {       
            mt_srand();
            $filename = md5(uniqid(mt_rand())).$file_ext;   
        }
    
        if ( ! file_exists($path.$filename))
        {
            return $filename;
        }
    
        $filename = str_replace($file_ext, '', $filename);
        
        $new_filename = '';
        for ($i = 1; $i < 100; $i++)
        {           
            if ( ! file_exists($path.$filename.$i.$file_ext))
            {
                $new_filename = $filename.$i.$file_ext;
                break;
            }
        }

        if ($new_filename == '')
        {
            return FALSE;
        }
        else
        {
            return $new_filename;
        }
    }
    
    function prep_filename($filename) {
       if (strpos($filename, '.') === FALSE) {
          return $filename;
       }
       $parts = explode('.', $filename);
       $ext = array_pop($parts);
       $filename    = array_shift($parts);
       foreach ($parts as $part) {
          $filename .= '.'.$part;
       }
       $filename .= '.'.$ext;
       return $filename;
    }
    
    function get_extension($filename) {
       $x = explode('.', $filename);
       return '.'.end($x);
    } 


// Uploadify v1.6.2
// Copyright (C) 2009 by Ronnie Garcia
// Co-developed by Travis Nickels
if (!empty($_FILES)) {
    $path = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
   //$client_id = $_GET['client_id'];
   $file_temp = $_FILES['Filedata']['tmp_name'];
   $file_name = prep_filename($_FILES['Filedata']['name']);
   $file_ext = get_extension($_FILES['Filedata']['name']);
   $real_name = $file_name;
   $newf_name = set_filename($path, $file_name, $file_ext);
   $file_size = round($_FILES['Filedata']['size']/1024, 2);
   $file_type = preg_replace("/^(.+?);.*$/", "\\1", $_FILES['Filedata']['type']);
   $file_type = strtolower($file_type);
   $targetFile =  str_replace('//','/',$path) . $newf_name;
   move_uploaded_file($file_temp,$targetFile);

   $filearray = array();
   $filearray['file_name'] = $newf_name;
   $filearray['real_name'] = $real_name;
   $filearray['file_ext'] = $file_ext;
   $filearray['file_size'] = $file_size;
   $filearray['file_path'] = $targetFile;
   $filearray['file_temp'] = $file_temp;
   //$filearray['client_id'] = $client_id;

   $json_array = json_encode($filearray);
   echo $json_array;
}else{
    echo "1";   
}

私は初心者だと言ったように、ここで何が起こっているのか確信が持てませんが、$json_array、その配列が私のデータ $filearray、つまりアップロードされたデータファイルを保持していることを知っています。ミッション1コンプリート

今私のコントローラー:upload.php

<?php
class Upload extends CI_Controller
{
public function __construct()
    {
        parent::__construct();
        
                $this->load->helper('form');
                $this->load->helper('url');

    }
    /*
    *   Display upload form
    */
    function index()
    {
        
        $this->load->view('view');
    }
    
    
    /*
    *   Handles JSON returned from /js/uploadify/upload.php
    */
    function uploadify()
    {
        
        //Decode JSON returned by /js/uploadify/upload.php
        $file = $this->input->post('filearray');
        $data['json'] = json_decode($file);
        
        $this->load->view('uploadify',$data);
    }
    
}
/* End of File /application/controllers/upload.php */

私の計画は、onComplete関数でデータを送信することです

私の見解:view.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<<head>
    <meta charset="UTF-8">
    <title>Uploadify and Codeigniter Tutorial</title>
<?php
   $this->load->helper('html');
   echo link_tag('http://uploadify_tutorial/uploadify/uploadify.css');
   echo '<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>';
   echo '<script src="http://localhost/uploadify_tutorial/uploadify/swfobject.js" type="text/javascript"></script>';
   echo '<script src="http://localhost/uploadify_tutorial/uploadify/jquery.uploadify.v2.1.4.min.js" type="text/javascript"></script>';
$uploadpath="";
$uploadpath=str_ireplace($_SERVER['DOCUMENT_ROOT'],"", realpath($_SERVER['SCRIPT_FILENAME']));
$uploadpath=str_ireplace("index.php","",$uploadpath);
?>


    <script type="text/javascript" language="javascript">
        $(document).ready(function(){
                                        
                    $("#upload").uploadify({
                            uploader: '<?php echo base_url();?>uploadify/uploadify.swf',
                            script: '<?php echo base_url();?>uploadify/uploadify.php',
                            cancelImg: '<?php echo base_url();?>uploadify/cancel.png',
                            folder: '/uploads',
                            scriptAccess: 'always',
                            multi: true,
                            'onError' : function (a, b, c, d) {
                                 if (d.status == 404)
                                    alert('Could not find upload script.');
                                 else if (d.type === "HTTP")
                                    alert('error '+d.type+": "+d.status);
                                 else if (d.type ==="File Size")
                                    alert(c.name+' '+d.type+' Limit: '+Math.round(d.sizeLimit/1024)+'KB');
                                 else
                                    alert('error '+d.type+": "+d.text);
                                },
                            'onComplete'   : function (event, queueID, fileObj, response, data) {
                                                //Post response back to controller
                                                $.post('<?php echo site_url('upload/uploadify');?>',{filearray: response},function(info){
                                                    $("#target").append(info);  //Add response returned by controller                                                                         
                                                });                                         
                            }
                    });             
        });
    </script>
</head>

<body>
<h1>Uploadify Example</h1>
    
    <?php echo form_open_multipart('upload/index');?>
    
    <p>
        <label for="Filedata">Choose a File</label><br/>
        <?php echo form_upload(array('name' => 'Filedata', 'id' => 'upload'));?>
        <a href="javascript:$('#upload').uploadifyUpload();">Upload File(s)</a>
    </p>
    
    
    <?php echo form_close();?>
    
    <div id="target">
    
    </div>
</body>
</html>

私の見解:uploadify

<html>
    <ul>
    
        <li>Extension: <?php echo $json->{'file_ext'};?></li>
        <li>File Size: <?php echo $json->{'file_size'};?></li>
        <li>File Path: <?php echo $json->{'file_path'};?></li>
    </ul>
    </html>

次に、そのjson_array変数を私のビューに解析します。これが計画ですが、実際にはコードが機能し、データは未定義です。エラーです。非オブジェクトのプロパティを取得しようとしています。ここでこのコードを使用します。問題はjsonにあると思います

誰かがその問題を解決できる場合は、アップロードされたデータファイルを使用したいだけです。それを共有するか、CI +アップロードプログラムを私のメールに送信してください。段階的に、私のような初心者にとっては大きな助けになると思います

ありがとう....

私のメールアドレス:saya.dean@gmail.com

4

1 に答える 1

0

どこで問題が発生しているのかはっきりしません。「その変数」はアップロードしたファイルになりますよね?アップロード時にファイルパスの配列を作成し、アップロードが完了すると、電子メールの添付ファイルごとに循環します。サイトで他の回答を確認しましたか? 多分ここを見てください。ただし、CI のドキュメントには、以下を使用できることが明確に記載されています。

$this->email->attach('/path/to/that_file.jpg');

複数回。

アップデート:

uploadify で onUploadSuccess 関数を使用して、各ファイル名を後で使用できるものに追加することもできます...

  'onUploadSuccess' : function(file, data, response) {
     alert('The file name is ' + file.name);
     ...

または、uploadify.php 内から。そこから、後で取り付けるために必要なものを保管できます。

あなたの場合、私は uploadify.php を変更することに固執します。行き詰まっている場合は、試してみてコードを投稿する必要がありますが、ここここのようにアイデアを得る場所はたくさんあります

于 2013-02-20T15:39:03.577 に答える