php导出mongo日志,导出mongo库到本地

需求:

在yii框架架下,导出生产mongo库中的数据到json文件,下载到本地

调用:

1.在/web/Controllers/TestController.php下引用

public function actionExport()

{

public $target='/WWW/web/html/import/'; //windows 导出文件所在目录

$export =new Export($target,'QuestionUser',96);

}

2.在/web/model下创建Export.php

/*导出mongo库中的数据

* @author lizhihui

* @date 2018-5-29

* 调用例子:Export('MyModel',96); //导出数据库MyModel中qId为96的数据

*/

Class Export

{

public $target;

public $model; //数据库对象 string,例如:'QuestionAnswer','QuestionUser'

public $qId; //问卷id int

public $db;

/*

* $target 导出文件所在目录

* $model

* $qId

*/

public function __construct($target,$model,$qId)

{

$this->target = $target;

$this->db=$model;

$this->model = new $model;

$this->qId = (int)$qId;

$this->export();

}

/**

* 导出mongo生产数据用于本地测试

* @author lizhihui

* @date 2018-5-29

*/

public function Export()

{

$iCount = $this->model->count(array(

'conditions'=>array(

'qId'=>array('equals' => $this->qId),

))

);

if(!$iCount){

$this->showMessage('数据为空');

}

$nStart = 0; //起始记录

$nCount = 100; //每次处理记录数

$nPage = intval($iCount/$nCount)+1;

$aReault=array();

for ($i=0;$i

$sWhere = array(

'conditions'=>array(

'qId'=>array('equals' => $qId),

),

'limit'=>$nCount,

'offset'=>$nStart,

);

$arr = $this->model->findAll($sWhere);

if(!is_dir($this->target)){

mkdir($this->target);

}

//写入文件

$limit = 1000;//每隔$limit行,刷新一下输出buffer,不要太大,也不要太小

foreach ($arr as $key => $val)

{

if($key!=0 && $key%$limit==0){

ob_flush();

flush();

}

$attr=$val->attributes;

//整理数据,删除不必要的键值

unset($attr['_id']);

unset($attr['current_db']);

unset($attr['pageInfo']);

$aReault[]=$attr;

}

$i++;

$nStart = $i*$nCount;

}

$filePath=$this->target.$this->db.'_'.$this->qId.'.json';

file_put_contents($filePath,json_encode($aReault));

//下载文件

if(!file_exists($filePath)){

$this->showMessage('目标文件不存在!');

}

header('Content-Type: application/json');

header('Content-Disposition: attachment; filename='.$this->db.'_'.$this->qId.'.json');

header('Accept-Ranges: bytes');

echo file_get_contents($filePath);

}

/**

* 信息输出

*/

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";

exit;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值