链接数据库window平台下使用任务计划定时执行php进行数据库处理

今天始终在查找链接数据库之类的问题,上午正好有机会和大家分享一下.

    

需求背景

    在一个论坛系统中,户用交提的论评如果管理核审才会示显。同时,有这么一个则规,如果此条论评在3天内没有管理员作操,直接删除,我称此行为为“价评过期理处”。

    

    

解决方案

    现在想到的解决方案有:

    1.每次管理请求论评表列页面时,进先行“价评过期理处”,然后再列出论评表列。

    这样做很明显的一个端弊就是率效太低,不斟酌。

    

    2.应用定时任务,比如天天晨凌1点就去执行“价评过期理处”,这类做法是比较好的。

    关于定时任务又有两种做法,一是应用PHP自带的sleep($interval) + while(true)(参考资料:http://blog.csdn.net/webdesman/article/details/4510372

    二是应用作操系统的划计任务。

    第一种的话,占用源资较多,始终开着一个死循环。户用体验欠好

    现在,选定了第二种定时任务。

    

    

    

编写php程序

    这里的程序只是一个示例,并非一个完全的逻辑。

    connec.php

<?php
/**
 *connect.php
 *--
 *by:集成显卡  1053214511@qq.com
 *2011-8-21--下昼12:15:20
 */
header("Content-Type:text/html;charset=UTF-8");
//义定一组于用链接的参数
define("MYSQL_SERVER", "localhost:3306");
define("MYSQL_USER", "root");
define("MYSQL_PASSWORD", "");
define("MYSQL_DATABASE", "human");//要链接并应用的数据库名
define("MYSQL_ENCODE", "UTF8");

/**
 * 获得一个mysql的接连 ,回返这个接连,应用的是默许的置设
 */
function getMysqlConnection(){
	//链接数据库
	$conn=@mysql_connect(MYSQL_SERVER,MYSQL_USER,MYSQL_PASSWORD) or die("链接mysql数据库失败。误错信息:".mysql_error());
	@mysql_select_db(MYSQL_DATABASE,$conn) or die ("没法找到指定的数据库:".MYSQL_DATABASE." 误错信息:".mysql_error());
	mysql_query('SET NAMES '.MYSQL_ENCODE,$conn) or die('字符集置设误错'.mysql_error());
	return $conn;
}
?>

    然后应用链接 log.php:

    每日一道理
青春是用意志的血滴和拼搏的汗水酿成的琼浆——历久弥香;青春是用不凋的希望和不灭的向往编织的彩虹——绚丽辉煌;青春是用永恒的执著和顽强的韧劲筑起的一道铜墙铁壁——固若金汤。
<?php

require_once 'connect.php';

/**
 * 获得现在记载数
 */
function getLogCount(){
	$sql="select count(*) from api_quote_log";
	$conn=getMysqlConnection();
	$result=mysql_query($sql,$conn) or die("sql语句执行错出:".mysql_error());
	$row=mysql_fetch_assoc($result);
	return $row['count(*)'];
}

/**
 * #查询申请日期到前当日期超越3天的记载
 */
function getLogList(){
	$logs=array();
	$sql="select * from api_quote_log as Q where (NOW() > DATE_ADD(Q.addDate,INTERVAL 3 DAY))";
	$conn=getMysqlConnection();
	$result=mysql_query($sql, $conn) or die("sql 语句执行错出:".mysql_error($conn));
	$index=0;
	while(!!($row=mysql_fetch_array($result,MYSQL_ASSOC))){
		$logs[$index++]=$row;
	}
	return $logs;
}

$count = getLogCount();

$info = date("Y-m-d H:i:s") . "  前当api_quote_log的记载数为 ".$count."\n";
$fp = fopen('D:/test.txt','a+');

fwrite($fp, "-----------------------------------------------\n");
fwrite($fp, $info);

$logList = getLogList();
foreach ($logList as $l){
	$info = $l['addDate']." resultCode=".$l['resultCode']."\n";
	fwrite($fp, $info);
}
fwrite($fp, "\n");
fclose($fp);
?>

    这里的文件要应用绝对路径(php文件可以应用相对路径)。

    

    connect.php 和 log.php 我都放在了 d盘。

    

    

建创划计任务

    以windowXP sp3 为例,进入”控制面板“--》“任务划计”:

    链接和数据库

    

    双击“添加任务划计”,在选择运行的应用程序时,选择 php.exe:

    链接和数据库

    

    建创完成后:

    链接和数据库

    

    接着配置要需执行我们刚刚建创的php文件:

    链接和数据库

    在运行中输入路径就能够了。

    

    

    

结果验证

    可以手动运行这个任务划计,打开test.txt:

    链接和数据库

    

    运行确正。

文章结束给大家分享下程序员的一些笑话语录: 神灯新篇
一个程序员在海滩上发现了一盏神灯。他在灯上擦了几下,一个妖怪就从灯里跳出来说:“我是世界上法术最强的妖怪。我可以实现你的任何梦想,但现在,我只能满足你一个愿望。”程序员摊开了一幅中东地图说:“我想让中东得到永久的和平。”妖怪答道:“哦,我没办法。自打创世纪以来,那里的战火就没有停息过。这世上几乎没有我办不到的事,但这件事除外。”程序员于是说:“好吧,我是一个程序员,为许多用户编写过程序。你能让他们把需求表述得更清楚些,并且让我们的软件项目有那么一两次按进度按成本完成吗?”妖怪说:“唔,我们还是来看中东地图吧。”

posted @ 2013-05-06 20:32  xinyuyuanm  阅读(252)  评论(0编辑  收藏  举报