1. 程式人生 > >關於tp3.2.3檔案匯入資料庫(去除重複資料)、寫日誌和下載問題

關於tp3.2.3檔案匯入資料庫(去除重複資料)、寫日誌和下載問題

   假設我們有一個student.csv檔案和一個student庫,現在要將student.csv檔案匯入資料庫。

1.關於去掉重複資料匯入資料庫的基本思路

      (1)首先我們將student資料庫裡的學號(no)取出來,放在$arrNo數組裡。

      (2)然後,我們再將csv檔案的學號(no)取出來,判斷學號(no)是否存在$arrNo陣列。

       (3)如果學號在$arrNo陣列中不存在,則將學號(no)追加到$arrNo,然後將記錄存放到$arr陣列。如果存在,則不插入。

2.現在我們有一個上傳檔案的一個頁面:

       <form action="__URL__/upload" style="text-decoration:center;" enctype="multipart/form-data" method="post">
                     <input type="file" name="photo" ><br>
                     <input type="submit" value="匯入" style="margin:0 auto;">
                     <input type="button" value="取消"  data-dismiss="modal">

        </form>

注意:enctype="multipart/form-data"這個是上傳檔案必寫的一個屬性。

3.然後我們在控制器寫一個上傳的upload方法:

      public function upload(){
              $upload = new \Think\Upload();// 例項化上傳類
              $upload->maxSize = 0 ;// 設定附件上傳大小
              $upload->exts = array('csv');// 設定附件上傳型別
              $upload->rootPath = './Uploads/'; // 設定附件上傳根目錄

              $upload->savePath = ''; // 設定附件上傳(子)目錄

              $info = $upload->upload();//獲取上傳的資訊

              if(!$info) {// 上傳錯誤提示錯誤資訊
	           $this->error($upload->getError());
	      }else{// 上傳成功
	           $this->import($upload->rootPath.$info['file']['savepath'].$info['file']['savename']);

	               }

             }

     }

4.在控制器寫一個匯入資料庫的import方法:

       public function import($file){

              $encoding=detect_encoding($file);
              //如果不是utf8格式,則轉換為utf8
                   if($encoding != 'UTF-8'){
                       $contens=file_get_contents($file);
                       $contens=mb_convert_encoding($contens, 'utf-8',$encoding);
                       file_put_contents($file, $contens);

                   }

                         $student=M('student');

                         $arrNo=$student->getField('no',true);

                         $fp=fopen($file,'r');//以讀的方式開啟

                              if($fp){
                  	           $fields=array('no','name','sex');
		                   $model=M('student');
		                   $arrNo=$model->getField('no',true);
		                    // dump($arrNo);

		                   $arr=array();//定義一個空陣列

                                   $i=1;//定義行數

                                       while (($row=fgetcsv($fp,1000,","))!==false) {
		                	      $row=array_combine($fields, $row);
		                	      // dump($row);
			                             if (in_array($row['no'], $arrNo)) {//判斷csv的學號在資料庫中是否存在
			                                  $tr.= '第'.$c.'行'.$row['no']."存在\r\n";
			                             }else{
			                                   $arrNo[]=$row['no'];
			                                   $arr[]=$row;
			                                   $tr.='第'.$c.'行'.$row['no']."匯入成功\r\n";        
			                 }
			                                   if (count($arr)==1000) {
			                                       $model->addAll($arr);
			                                       unset($arr);
			                                       $this->show('匯入成功','student/index');

			                                     }

                                                                 $i++;

			               }

                                                                     $data=writelog("myerror",$tr);//呼叫寫日誌方法
				                                          if (count($arr)>0) {
				                                              $model->addAll($arr);
				                                              $this->success('匯入成功','index');
				                                         }else{
                                                                              $this->error('資料庫已存在');
				                                          }

                            }

                    }

        }

    在function.php中寫一個寫日誌函式:

                 function writelog($type="",$content=""){
                         if(!$content || !$type){
                                 return false;
                        }    
                               $dir=getcwd().DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR.$type;
                                      if(!is_dir($dir)){ 
                                           if(!mkdir($dir)){
                                                 return false;
                                           }
                                      }
                                           $filename=$dir.DIRECTORY_SEPARATOR.date("Ymd",time()).'.log';   
                                            $logs=include $filename;
                                                    if($logs && !is_array($logs)){
                                                              unlink($filename);
                                                             return false;
                                                    }
                                                                $logs=$content;
                                                               $str=var_export($logs, true).";";
                                                                       if(
[email protected]
($filename,"wb")){ return false; } if(!fwrite($fp, $str))return false; fclose($fp); return true; } 最後我們在控制器寫一個下載的方法: public function xia(){ $file_dir = "./Logs/myerror/"; $file_name = date("Ymd",time()).'.log'; if (!file_exists ($file_dir.$file_name )) { echo "檔案找不到"; exit (); } else { //開啟檔案 $file = fopen ( $file_dir . $file_name, "r" ); //輸入檔案標籤 Header ( "Content-type: application/octet-stream" ); Header ( "Accept-Ranges: bytes" ); Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) ); Header ( "Content-Disposition: attachment; filename=" . $file_name ); //輸出檔案內容 //讀取檔案內容並直接輸出到瀏覽器 echo fread ( $file, filesize ( $file_dir . $file_name ) ); fclose ( $file ); exit (); } } 然後我們可以在模板檔案中加一個<a href="__URL__/xia">下載</a>,這樣就可以實現下載功能。

相關推薦

關於tp3.2.3檔案匯入資料庫去除重複資料日誌下載問題

   假設我們有一個student.csv檔案和一個student庫,現在要將student.csv檔案匯入資料庫。1.關於去掉重複資料匯入資料庫的基本思路      (1)首先我們將student資料庫裡的學號(no)取出來,放在$arrNo數組裡。      (2)然後,

tp3.2.3 PHPExcel 匯入資料庫

最近開發的專案客戶有個Excel匯入的需求 將Excel中的資料匯入資料庫 這也是個比較老套的功能了  不過自己之前一直沒有做過  所以揣摩了半天時間  現在在這分享下 首先就是下載PHPExcel類,將下載好的類放置在專案的Org/Util目錄下 ,當然這個位置不是死的

layui框架檔案上傳 + TP3.2.3 檔案上傳後臺處理php

layui框架是1.0.9版本。。首先html頁面程式碼如下: <div class="layui-form-item" id="upload_file">

TP3.2.3檔案上傳

上傳表單 在ThinkPHP中使用上傳功能無需進行特別處理。例如,下面是一個帶有附件上傳的表單提交: <formaction="__URL__/upload"enctype="multipart/form-data"method="post"><input

將Excel檔案匯入資料庫POI+Excel+MySQL+jsp頁面匯入第一次優化

本篇文章是根據我的上篇部落格,給出的改進版,由於時間有限,僅做了一個簡單的優化。2018年4月1日,新增下載地址連結:點選開啟原始碼下載地址十分抱歉,這個連結地址沒有在這篇文章上公佈出來。希望不是很晚。上篇文章的是這樣的一個數據流向:瀏覽器端開啟上傳頁面,選擇檔案,上傳,將e

51Nod1010 只包含因子2 3 5的數打表+ lower_bound

 lower_bound這個函式挺好用的。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; c

TensorFlow HOWTO 2.3 支援向量分類高斯核

遇到非線性可分的資料集時,我們需要使用核方法,但為了使用核方法,我們需要返回到拉格朗日對偶的推導過程,不能簡單地使用 Hinge 損失。 操作步驟 匯入所需的包。 import tensorflow as tf import numpy as np import matplo

tp3.2.3運用phpexcel將excel檔案匯入mysql資料庫

1,下載PHPExcel 2,配置將下載好的PHPExcel檔案與PHPExcel.php 放到thinkphp 根目錄 include/Library/Org/Util/下面 3,同時將PHPExcel.php 改名為 PHPExcel.class.php 以上是將PHP

python讀json檔案匯入資料庫回答https://ask.csdn.net/questions/712969

1、思路一dataframe入庫 import pandas as pd import numpy as np data=pd.read_json('test.json',orient='values',encoding='utf-8') for indexs in data.i

【PHP】TP3.2.3 IIS伺服器隱藏index.php入口檔案

在TP根目錄新建檔案:web.config 寫入下列程式碼: <?xml version="1.0"?> <configuration> <system.webServer> <rewrite>

POI 匯入匯出Excel檔案資料庫轉載

1.匯入相應的poi jar包,我用的是3.7; 2.匯入Excel檔案到資料的類(這裡我把解析Excel檔案的操作封裝成一個類,在action中只要呼叫該類就可以了): Java程式碼 /**       * POI:解析Excel檔案中的資料並把每行資料封裝成一個實體       * @par

SpringMVC 實現POI讀取Excle檔案資料匯入資料庫上傳匯出資料庫中資料到Excle檔案下載

package com.shiliu.game.utils; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import

應用TP3.2.3的一些小問題

好久沒寫部落格了,最近剛到青島這邊找工作,有一大堆的事情,加上第一個專案比較趕,一直也沒什麼時間更新下部落格。難得今天有時間,就把最近用TP3.2碰到的一些問題給總結一些,做個記錄吧。1、tp的<

用goquery從國家統計局拉取最新省市區3級行政區劃程式碼,生成SQL檔案匯入資料庫

想找一份最新的省市區三級聯動的資料,網上的怕不夠新,不夠準確 正好用go從國家統計局官方網站爬一份,生成sql檔案,然後匯入資料庫 資料庫表結構 DROP TABLE IF EXISTS `3goals_area`; CREATE TABLE `3go

TP3.2.3學習(一) | 配置檔案

TP3.2.3學習(一) 配置檔案的操作 1、讀取配置檔案 PHP echo C( 'DB_HOST' ); 2、動態改變配置檔案的值 PHP C('DATA_CACHE_TIME', 60); 3、批量配置配置檔案 PHP $config = array(

46求1+2+3+...+n,要求不能使用乘除法forwhileifelseswitchcase等關鍵字及條件判斷語句A?B:C

closed else while spl 判斷語句 stat 條件 執行 ret 思路:循環或者遞歸都有個結束條件和執行條件。用&&短路與代替。 //短路與&&;就是只有前一個條件滿足才可以去判斷第二個條件。 //遞歸的出口

奪命雷公狗TP3.2.3商城3-----數據庫的創建以及連接

roo tmpl sql .cn mysql 連接 images return root 然後我們來到TP中配置一下數據庫連接 D:\phpStudy\WWW\shop\WEB\Common\Conf: <?php return array(

奪命雷公狗TP3.2.3商城8-----管理員登錄並且保存session

確認密碼 存在 驗證用戶名 error control splay erro cte 行處理 首先我們在D:\phpStudy\WWW\shop\WEB\Admin\Controller 目錄下創建LoginController.class.php,登錄和註銷都是在這個控

奪命雷公狗TP3.2.3商城9-----後臺退出

die spl null fun mage tro .cn extends 3.2 我們直接在Login這個控制器裏寫多一個方法即可完成退出了, <?php namespace Admin\Controller; use Think\Controller; cla

奪命雷公狗TP3.2.3商城11-----後臺頭部左側導航分離

代碼 使用 phpstudy 效果 ima 導航 header dmi admin 我們來將網站後臺的頭部和左側的導航分離出來: 然後在模版中找到類為:topbar-inner clearfix 的地方: 然後我們在然後在D:\phpStudy\WWW\sho