ホームページ  >  記事  >  バックエンド開発  >  ディレクトリ内のファイルをスキャンして、Yii フレームワークのデータベースに入力する方法

ディレクトリ内のファイルをスキャンして、Yii フレームワークのデータベースに入力する方法

不言
不言オリジナル
2018-07-10 15:20:341808ブラウズ

この記事では、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";

    }
}

上記がこの記事の全内容です。皆様の学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 !

関連する推奨事項:

Yii は例外解決策をキャッチできません

以上がディレクトリ内のファイルをスキャンして、Yii フレームワークのデータベースに入力する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。