>  기사  >  백엔드 개발  >  디렉터리의 파일을 스캔하고 Yii 프레임워크의 데이터베이스에 입력하는 방법

디렉터리의 파일을 스캔하고 Yii 프레임워크의 데이터베이스에 입력하는 방법

不言
不言원래의
2018-07-10 15:20:341811검색

이 글에서는 주로 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 중국어 웹사이트를 주목해주세요!

관련 추천:

Yii는 예외 해결 방법을 잡을 수 없습니다

yii2 암호화 및 복호화 소개

위 내용은 디렉터리의 파일을 스캔하고 Yii 프레임워크의 데이터베이스에 입력하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.