這篇文章主要介紹了關於在yii架構中掃描目錄下檔案入資料庫的方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
需求:
帶yii架構下寫一個定時任務,掃描某一目錄$target下的json檔案,並匯入指定的資料庫中
實現:
1.把需要入庫的json檔案放在指定目錄$target下
2.執行定時任務,匯入到mongo庫Vote_teacher中
/opt/modules/php/bin/php /www/web/protected/yiic.php import VoteTeacher
3.定時任務代碼:
/web/protected/commandsImportCommand.php
<?php/** * 匯入mongo庫到測試環境 * * @author lizhihui * @date 2018-4-9 * @console php www/web/protected/yiic.php import VoteTeacher> /tmp/abc1.txt */class ImportCommand extends CConsoleCommand { public $target='/www/web/html/import/'; //掃描的目錄 public $model; //入庫的資料庫物件 public function run($args) { if (isset($args[0])) { $this->showMessage("params error", 1); exit; } $this->model = $args[0]; $this->import(); } /** * 分析使用者回答的資訊並按格式入庫vote_answer * @author lizhihui * @date 2018-4-9 */ private function import() { $files = scandir($this->target); //讀取目錄下檔案 foreach ($files as $key => $val) { $val = pathinfo($val); $extension = $val['extension']; //過濾掉非json格式 if($extension!='json'){ continue; } $filePath=$this->target.$val['basename']; $fp=fopen($filePath,'r'); $content=''; while (!feof($fp)){ $content.=fread($fp, filesize($filePath)/10);//每次讀出檔案10分之1 //進行處理 } $arr=json_decode($content); if(empty($arr)){ $this->showMessage("no data to import"); die(); } //執行個體化不同資料庫 $tag=true; foreach ($arr as $key => $val) { //儲存 $aVal = (array)$val; $model = new $this->model; if($model instanceof SMongodb){//動態欄位儲存 foreach ($aVal as $k => $v) { $model->$k=$v; } }else{//非動態欄位儲存 $model->attributes=$aVal; } if(!$model->save()){ $tag=false; }else{ unset($model); //銷毀一個對象,再次使用的時候會new一個新的 } } } if(!$tag){ $this->showMessage("some error in import"); }else{ $this->showMessage('import success!'); } } /** * 資訊輸出 * @author lizhihui * @date 2018-4-9 */ private function showMessage($str, $err = 0) { if (!$str) { return false; } if ($err) { echo "[ERROR]"; } else { echo "[SUCCESS]"; } echo date("Y-m-d H:i:s", time()) . " " . $str . "\n"; }}
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!