今天始终在查找链接数据库之类的问题,上午正好有机会和大家分享一下.
需求背景
在一个论坛系统中,户用交提的论评如果管理核审才会示显。同时,有这么一个则规,如果此条论评在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:
运行确正。
文章结束给大家分享下程序员的一些笑话语录:
神灯新篇
一个程序员在海滩上发现了一盏神灯。他在灯上擦了几下,一个妖怪就从灯里跳出来说:“我是世界上法术最强的妖怪。我可以实现你的任何梦想,但现在,我只能满足你一个愿望。”程序员摊开了一幅中东地图说:“我想让中东得到永久的和平。”妖怪答道:“哦,我没办法。自打创世纪以来,那里的战火就没有停息过。这世上几乎没有我办不到的事,但这件事除外。”程序员于是说:“好吧,我是一个程序员,为许多用户编写过程序。你能让他们把需求表述得更清楚些,并且让我们的软件项目有那么一两次按进度按成本完成吗?”妖怪说:“唔,我们还是来看中东地图吧。”