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:



运行正确。

转载于:https://www.cnblogs.com/nerve/archive/2013/05/06/3185427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
windows下使用PHP实现定时执行脚本 一直以来,使用PHP定时运行脚本都是让大家头痛的问题,但是我们确实可以利用windows的计划任务定时调用PHP脚本,当然这还要感谢PHP.exe。下面,站长将向大家介绍,如何来实现。 目标:根据系统时间定时执行PHP脚本,不需要人工运行(这里以定时新建一个文本文件并写入内容为例) 解决步骤: 1、建立PHP脚本,如下: 大家,可以看见,我们在这里对将要创建的文件路径使用了绝对路径,这是因为我们将要通过windows命令行来调用此脚本,由于cmd.exe与我们的web根目录是不一样的,而php的文件目录函数只能在web根目录范围内进行操作,所以我们需要使用绝对路径,否则代码将正确执行但是文件将不会被创建。 2、新建.bat文件,代码如下: "D:\Program Files (x86)\Web\PHP\php.exe" -f "D:\Program Files (x86)\Web\www\root\go.php" 保存,并命名为run.bat。 注意,如果你的PHP目录或web根目录中含有空格,你需要使用引号将整个路径引用起来,否则将运行错误。站长的目录中含有空格,因此使用了引号。创建属于你自己的bat文件时,请根据自身情况决定是否要使用引号和文件的目录。 3、添加windows计划任务 从控制面板中打开计划任务(这里主要针对win7用户进行说明),点击“创建基本任务”,填写名称和描述,然后点击“下一步”,选择任务执行的频率,很好理解,然后点击“下一步”,设置任务执行时间,然后点击“下一步”,选择“启动程序”,点击“下一步”,点击浏览按钮选择我们建立的“run.bat”文件,点击”下一步“,点击”完成“。 4、运行 根据你设置的时间,系统会定时自动运行,如果你等不及也可以手动执行。在”计划任务“中间栏下方的任务名中查找你刚才新建的任务,鼠标双击该任务,单击右边的运行按钮,系统会弹出一个cmd对话框然后关闭,这说明你的脚本已经正确执行了,到创建文件的目录去检查文件是否创建。 好了,在windows下使用PHP实现计划任务就介绍到这里了,希望对大家有帮助。 (责任编辑:麦田守望者)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值