在yii架構中掃描目錄下檔案入資料庫的方法

來源:互聯網
上載者:User
這篇文章主要介紹了關於在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!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.