从目录附加文件并使用codeigniter发送到电子邮件

时间:2013-02-18 09:18:23

标签: php file-upload codeigniter-2 uploadify email-attachments

我是codeigniter的新手,我想使用codeigniter框架构建一个网站。从一开始,它看起来很好我可以使用数据库,验证,电子邮件,会话,然后我尝试附加文件并发送电子邮件:

  

$这 - >的电子邮件 - >附加( '/路径/新书/ constan / file.anything');

那也可以。

因为那是一个网站,我希望我的客户选择他们想要上传的文件。 我尝试了很多方法,其中很多都告诉上传文件到服务器root并获取file_data,使用file_data [file_patch]

  

$这 - >的电子邮件 - >附加( 'file_data [FILE_PATH]');

问题是:

  1. 由于代码点火器无法上传多个数据,我必须使用插件。我试过它的PAIN

  2. 我觉得它无效,将数据上传到服务器root然后发送电子邮件?

  3. 最好只获取上传文件的file_path并将其发送到电子邮件,怎么做?

  4. 我使用jquery mobile构建它,我该怎么办?

    更新

    好吧我决定使用uploadify我搜索每个网站,然后我找到here,我的代码是

    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,即上传的数据文件。任务一完整

    现在我的控制器: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变量解析为我的视图,即计划,但实际上代码不起作用,数据未定义 错误尝试获取非对象的属性我使用此代码here,我想问题是json

    我只是想使用上传的数据文件,如果有人可以解决该问题请分享或发送我CI + uploadify程序到我的电子邮件,如果有任何关于CI和Uploadify插件的专家请逐步制作教程如何使用它,一步一步,我觉得这对像我这样的新手很有帮助

    感谢....

    我的电子邮件:saya.dean@gmail.com

1 个答案:

答案 0 :(得分:0)

我不清楚你遇到问题的地方。 '那个变量'将是你上传的文件,是吗?在上传文件路径时创建文件路径的数组,并在完成上传时创建每个文件路径以用于电子邮件附件。 你在网站上检查了其他答案吗?也许看看here。但CI's documentation明确指出您可以使用:

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

多次。

<强>更新

您可以尝试使用uploadify中的onUploadSuccess函数将每个文件名附加到以后可以使用的内容中......

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

来自uploadify.php内的OR。从那里,您可以存储您需要的附件。

在你的情况下,我坚持修改uploadify.php 。如果你遇到问题,你必须先试一试并发布一些代码,但有很多地方可以获得诸如herehere之类的想法