注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

isblog主页

或许不一定要做得最多,但一定要做得最好! 能力就是一种财富,积累越多,就越体现你

 
 
 

日志

 
 

非CI正常模式调用数据库访问类(外部访问CI数据库类)  

2013-03-20 16:07:57|  分类: PHP学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
背景:最近在使用CI做项目,有一个需求就是要使用linux定时任务来执行一个脚本文件来做定时批量删除日志(只保留近三个月日志即可)。如果自己去找mysql类库,或者用原生的mysql函数去做处理感觉有些麻烦,所以简单的加了些文件而直接使用CI的数据库访问类进行操作数据库了。

1、比如我在CI目录下加了一个tools目录,用来写php脚本做批量删除功能。
2、在tools目录下写一个扩展类db_model.php,这个类就是用来调用CI原来的数据库访问类的。
3、报错处理,当表不存在时,系统要报错,但是原来的Lang.php调用了一些方法,这些方法是要按CI正常访问方式才能使用,如果是直接在linux命令行访问是出错的,如:php ci/tools/test.php。所以这里扩展了Lang.php类。
4、扩展Lang.php类:MY_Lang.php,主要是重写了load方法,而这个方法只修改了加载语言文件的代码

5、linux下执行示例:ci/tools/test.php

db_model.php

<?php
/**
* 定义和CI框架一样的根路径
* @var string
*/
define('FCPATH', dirname(__FILE__).'/../');

/**
* 定义和CI框架一样的系统路径
* @var string
*/
define('BASEPATH', dirname(__FILE__).'/../system/');

/**
* 定义和CI框架一样的应用路径
* @var string
*/
define('APPPATH', dirname(__FILE__).'/../application/');

/**
* 定义和CI框架一样的后缀名
* @var string
*/
define('EXT', '.php');

/**
* 引入系统DB文件DB.php
*/
require_once(BASEPATH.'database/DB' . EXT);

/**
* 引入系统函数库Common.php
*/
require_once(BASEPATH.'core/Common' . EXT);

/**
* db Model Class
*
* @property CI_DB_active_record $db
* @author LINKLIN
*/
class db_model {

/**
* db driver
*/
public $db;

/**
* 构造方法,创建db_driver对象
* @param mixed $params 完整的数据库配置,或者对应database.php文件中$db数组的下标值(如:default)
* @return void
*/
public function __construct($params = '')
{
/**
*
$params = array(
'dbdriver' => 'mysql',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'test',
'pconnect' => TRUE,
'db_debug' => FALSE,
'cache_on' => FALSE,
'char_set' => 'utf-8',
'dbcollat' => 'utf8_general_ci',
);
OR
$params = 'default';即下面database.php文件中$db下标值
*/
if(empty($params) OR !is_array($params)){
include APPPATH."/config/database".EXT;
$params = isset($db[$params])?$db[$params]:$db[$active_group];
}
$this->db = DB($params);
}
}

test.php


<?php
require_once('db_model.php');
class test1 extends db_model{

public function __construct(){
parent::__construct();
}

public function index(){
$this->db->select("*");
$query = $this->db->get('pageviews');
foreach ($query->result() as $row)
{
var_dump($row);
}
}
}
$obj = new test1();
$obj->index();

$DBModel = new db_model();
$DBModel->db->select('*');
$query = $DBModel->db->get('pageviews');
echo "\n";
foreach ($query->result() as $row)
{
var_dump($row);
}

MY_Lang.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Lang extends CI_Lang
{
public function __construct(){
parent::__construct();
}

/**
* (non-PHPdoc) 重写load方法,主要是不从CI入口文件index.php进入时,调用不存在方法get_instance()报错问题
* @see CI_Lang::load()
*/
function load($langfile = '', $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = '')
{
$langfile = str_replace('.php', '', $langfile);

if ($add_suffix == TRUE)
{
$langfile = str_replace('_lang.', '', $langfile).'_lang';
}

$langfile .= '.php';

if (in_array($langfile, $this->is_loaded, TRUE))
{
return;
}

$config =& get_config();

if ($idiom == '')
{
$deft_lang = ( ! isset($config['language'])) ? 'english' : $config['language'];
$idiom = ($deft_lang == '') ? 'english' : $deft_lang;
}

// Determine where the language file is and load it
if ($alt_path != '' && file_exists($alt_path.'language/'.$idiom.'/'.$langfile))
{
include($alt_path.'language/'.$idiom.'/'.$langfile);
}
else
{
$found = FALSE;

// foreach (get_instance()->load->get_package_paths(TRUE) as $package_path)
// {
// if (file_exists($package_path.'language/'.$idiom.'/'.$langfile))
// {
// include($package_path.'language/'.$idiom.'/'.$langfile);
// $found = TRUE;
// break;
// }
// }

//20130320修改:修改语言文件加载方法
$langfiles = glob(APPPATH.'language/'.$idiom.'/*.php');//读取语言目录下后缀为.php的文件
if(empty($langfiles)){
$langfiles = glob(BASEPATH.'language/english/*.php');
}
foreach ($langfiles as $filepath)
{
if (strstr($filepath,$langfile))
{
include($filepath);
$found = TRUE;
break;
}
}
if ($found !== TRUE)
{
show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile);
}
}


if ( ! isset($lang))
{
log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile);
return;
}

if ($return == TRUE)
{
return $lang;
}

$this->is_loaded[] = $langfile;
$this->language = array_merge($this->language, $lang);
unset($lang);

log_message('debug', 'Language file loaded: language/'.$idiom.'/'.$langfile);
return TRUE;
}

}


  评论这张
 
阅读(601)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018