1. 程式人生 > >php 上傳檔案 cvs檔案

php 上傳檔案 cvs檔案

html程式碼:

<form action="/message/index/csv" encType="multipart/form-data" method="post" target="uploadcvs">
<div><input type="file" name="csvfile"/> &nbsp;<input type="submit" value="上傳"></div>
<div id="upload_info" style="width:100%;border:1px solid #809db9;display:none" ></div>
</form>

target="uploadcvs",新增target時除錯程式碼不好除錯,建議除錯時去掉這行程式碼

php程式碼:

public function csvAction(){
    //獲取上傳檔名$fileinfo,包含檔案的擴充套件
    $fileinfo = pathinfo($_FILES['csvfile']['name']); 
    //判斷檔案擴充套件是不是csv 
    if(!in_array(strtolower($fileinfo['extension']),array('csv'))){
        $feed = array('status'=>'ext');
    //判斷檔案的大小
    }else if($_FILES['csvfile']['size'] > 1*1024*1024){
        $feed = array('status'=>'size');
    }else{
        //成功時陣列
        $succdata = array();
        //錯誤時陣列
        $errdata = array();
        //計數,計算多少行
        $count = 0;
        //開啟臨時檔案,只讀形式
        $handle = fopen($_FILES['csvfile']['tmp_name'],"r");

        //獲取資料庫中的username資訊   
        $userMongo = new Application_Model_DbTable_MongoUsers();
        $dbUsers = $userMongo->findAll(array(),array('login.username'=>true));
        //把使用者的username資訊寫入$users
        $users = array();
        foreach($dbUsers as $user){
            if(isset($user['login']['username']))
                $users[] = $user['login']['username'];
        }
        //逐行讀取csv檔案資訊fgetcsv,fgetcsv($handle)
        while ($row = fgetcsv($handle)) {
            //讀一行count就累加,這樣就可以知道讀了多少行
            $count ++ ;
            foreach($users as $user){
                //判斷$row[0]是不是手機號&&$row[0]是不是等於$user也就是$users中是否有這條記錄
                //判斷成功時,把這條手機號寫入陣列$succdata
                if(preg_match('/^1(3|4|5|8)\d{9}$/',$row[0]) && $user==$row[0]){
                    $succdata[$row[0]] = (string)$row[0];
                    break;                     
                }
            }
            //判斷$succdata[$row[0]]是否存在,不存在寫入$errdata
            if(!isset($succdata[$row[0]])){
                $errdata[$row[0]] = $row[0];
            }
        }
        //關閉檔案
        fclose($handle);
        //把上傳的cvs檔案存到自己的專案中
        $url = $this->_helper->Upload->msgcsv($_FILES['csvfile'], $succdata, $errdata);
        //$count資訊是關於csv檔案有多少行記錄,成功多少行,失敗多少行
        $count = array('original'=>$count, 'success'=>count($succdata), 'error'=>count($errdata));
        //$feed,這裡狀態是成功的,count, 與 url 。
        //count是為了檢視是否有失敗的,url是為了檢視失敗的列表資訊(因為上傳時換回了3個檔案,檢視失敗檔案) 
        $feed = array('status'=>'succ','count'=>$count, 'url'=>$url);    
    }
        //把陣列json化 json_encode() json_encode()json編碼
        $feed = json_encode($feed);
        //callback()函式 <script>parent.callback(".$feed.")</script>
        echo "<script>parent.callback(".$feed.")</script>";
        exit;
 }

js程式碼:

//data就是".$feed."
function callback(data){    
    try{
     if(data.status =='ext'){
         alert('檔案型別不正確');
         return false;
     }else if(data.status == 'size'){
         alert('檔案不能超過1M');
         return false;
     }else if(data.status == 'succ'){
         //parseInt將字串轉化為整型 parseInt
         var html = parseInt(data.count.error) > 0 ? ' <a href="<?php echo UPLOAD_IMAGE_PATH;?>'+data.url.error+'">檢視失敗列表</a>' : '';
         //成功的條數,失敗的條數
         $('#upload_info').html('成功匯入:'+data.count.success+';失敗:'+data.count.error+html);
         $('#upload_info').show();
      $('input[name=step3_hidden]').val(data.url.success);
         }       
    }catch(e){     
        alert('解析出錯,請檢查檔案格式.');
    }
    return false;
}

Upload.php檔案

<?php
//上傳處理
class Ata_Controller_Action_Helper_Upload extends Zend_Controller_Action_Helper_Abstract {

    //通知csv檔案
    public function MsgCsv(&$source, $succdata, $errdata){

        //原cvs保留
        //檔案存放目錄
        $publicPath = realpath(APPLICATION_PATH."/../public/upload").'/';
        $csvPath = "msgcsv/".date('Y').'/'.date('m')."/";
        $path = $publicPath.$csvPath;
        //建立目錄
        $this->mkdirs($path);
        //uniqid() 函式基於以微秒計的當前時間,生成一個唯一的 ID。uniqid()
        $filename = uniqid();
        //獲取檔案的副檔名
        $ext = pathinfo($source['name'], PATHINFO_EXTENSION);
        //建立空檔案,目錄,檔名,擴充套件
        $filepath = $path.$filename.'_org.'.$ext;
        //move_uploaded_file(),將上傳的檔案移動到新位置
        move_uploaded_file($source['tmp_name'], $filepath);

        //正確csv建立
        $content = '';
        //建立空檔案,目錄,檔名,擴充套件
        $succfile = $path.$filename.'_succ.'.$ext;
        //把$succdata的內容寫入$content;
        foreach($succdata as $row){
            //連線字串等同$content = $content.$row."\n"
            $content .= $row."\n";
        }
        $content = trim($content,"\n");
        //file_put_contents(),把一個字串寫入檔案中
        file_put_contents($succfile, $content);

        //錯誤csv建立
        $content = '';
        $errfile = $path.$filename.'_err.'.$ext;
        foreach($errdata as $row){
            $content .= $row."\n";
        }
        $content = trim($content,"\n");
        file_put_contents($errfile, $content);

        //返回3個檔案(用於檢視失敗列表與把成功的列表內容寫入隱藏域中傳遞到資料庫中)
        return array(
            'orginal' => $csvPath.$filename.'_org.'.$ext,
            'success' => $csvPath.$filename.'_succ.'.$ext,
            'error' => $csvPath.$filename.'_err.'.$ext
        );
    }
    //刪除檔案
    //獲取csv檔案的字首名
    public function rmMsgCsv($path){
        //$prefix獲取csv檔案的字首名
        $prefix = str_replace('_succ.csv','',$path); 
        //刪除三個檔案      
        unlink($prefix.'_org.csv');
        unlink($prefix.'_succ.csv');
        unlink($prefix.'_err.csv');
    }

    public function mkdirs($dir, $mode = 0777)  {
        return is_dir($dir) or ($this->mkdirs(dirname($dir)) and mkdir($dir, $mode));
    }
}

相關推薦

php 檔案 cvs檔案

html程式碼: <form action="/message/index/csv" encType="multipart/form-data" method="post" target="uploadcvs"> <div><inp

php.ini修改php檔案大小限制

開啟php.ini,首先找到file_uploads = on ;是否允許通過HTTP上傳檔案的開關。預設為ON即是開upload_tmp_dir ;檔案上傳至伺服器上儲存臨時檔案的地方,如果沒指定就會用系統預設的臨時資料夾upload_max_filesize = 8m ;望文生意,即允許上傳檔案大小的最大

PHP中curl模擬post及接收檔案

public function Action_Upload(){ $this->path_config(); exit(); $furl="@d:\develop\JMFrameworkWithDemo.rar"; $url= "http://localh

ajax+php檔案原始碼,可正常執行

完整的jquery Ajax+php上傳檔案原始碼,可直接放到網站目錄下執行 index.html <html> <head> <title>TEST</title> <meta charset="UTF-8"&g

php.ini修改php檔案大小限制的方法

開啟php.ini配置以下的引數 max_execution_time = 600 ;每個PHP頁面執行的最大時間值(秒),預設30秒 max_input_time = 600 ;每個PHP頁面接收資料所需的最大時間,預設60秒 memory_limit = 128m ;每個PHP頁面所吃掉的

php 檔案與下載檔案

上傳 /** * 單檔案上傳 * @param array $fileInfo 檔案資訊 是一個數組 * @param string $uploadPATH 檔案上傳預設路徑 * @param bool $imageFlag 是否檢測真實圖片 * @param arr

PHP和下載與刪除doc、docx、ppt、pdf檔案

<?php $action = $_REQUEST['action']; switch ($action) {     case 'upload':         $file  = $_FILES['file'];         $tmp_name = $file['tmp_name'];     

php 檔案時Internal Server Error或者mod_fcgid: HTTP request length 136136 (so far) exceeds MaxRequestLen

php檔案上傳時遇到這個坑:Internal Server Error,查了Apache下的日誌資訊,才知道: mod_fcgid: HTTP request length 136136 (so fa

PHP 檔案

    要實現php上傳檔案,分兩步: 一、製作一個html,用於檔案上傳: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta h

php檔案時候要是不移動到指定目錄是不會儲存在伺服器的是嗎

                   我在上傳檔案時候,後臺接收到檔案,但是沒有進行對該檔案的存放做處理,是不是就意味著檔案不會儲存到我的伺服器上任何位置,只是存在記憶體中而已?           

nginx, PHP檔案設定

上傳檔案太大導致超時或者返回413.設定如下項: 1./etc/php/7.0/fpm資料夾下的php.ini post_max_size = 1400M upload_max_filesize =

關於php檔案的限制

上傳附件時提示"沒有選擇上傳檔案" : 百度一下就知道谷歌,谷歌一下就知道搜搜,搜尋了N次,論壇也搜尋了N邊,好多解釋都是說php.ini的上傳大小限制,一般預設是2M,小的圖片都可以上傳了,所以我又去找別的問題。 本地能上傳,伺服器上不能傳,然後就對比2個php.i

php 在linux 同時多個檔案時報錯 SplFileObject::__construct(/tmp/phpvfQPvQ):

分析:這個不是上傳檔案的最大值的問題,而是由於linux系統自動清除臨時檔案的願意造成的   thinkphp\library\think\File.php 的建構函式加個判斷 if(file_exists($filename)) 簡單解決報錯可以讓你用起來 不知道有沒有其他其他不

如何在客戶端shell指令碼檔案,並利用PHP呼叫執行指令碼

題目中的上傳包含兩部分,一部分是上傳檔案,一部分是利用PHP執行指令碼 上傳檔案到指定資料夾 所謂檔案上傳是指將本地文字檔案,圖片視訊或者音訊等檔案上傳到伺服器上,以供後續操作的過程。 上傳檔案有幾種方式,包括: - 單純的form表單上傳提交 使

php 檔案——配置upload_max_filesize和post_max_size

本地php環境一般是phpstudy或wamp等整合環境,都能找到php.ini檔案。 php.ini配置檔案中預設檔案上傳大小是2M,即upload_max_filesize = 2M.如果超過則會

php大於檔案如何處理

如果專案用 apache 伺服器 apache 配置檔案 php.ini php.ini 專用於配置php程式(讓運維來改) a:copy php.ini -> php01.php c:修改配置 #是否允許上傳操作 file_uploads=On #OFF 上傳功能被禁止 #上傳檔

PHP 遠端圖片以及檔案

1.需要配置環境在 php.ini 檔案裡面加入 extension=php_curl.dll(我安裝的apache在D:盤我的php.ini路徑是在D:\xampp\php\ 2重啟apache  看下phpinfo()進行檢視是否配建成功!(可以在apache首頁左邊選

php檔案個數設定以及修改php.ini重啟nginx php.ini設定不生效

在linux中查詢php.ini檔案位置 find / -name php.ini 用編輯器開啟 並進行設定 如 max_file_uploads = 10  php-fpm重啟 檢視php-fpm程序 ps aux | grep php-fpm kill -QUIT

Ubuntu配置php檔案限制

路徑:/etc/php5/apache2/php.ini max_execution_time = 600 ;最大執行時間 600 秒 max_input_time = 600 ;最大輸出時間 600秒 memory_limit = 20M ;最大記憶體限制 20M file_uploads = On ;允許

PHP 檔案

php上傳檔案,form表單一定要加屬性enctype="multipart/form-data" html程式碼: <div class="file-box"> <input type="text" name="textfield" id="tex