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

天边云E家 shaoruisky

IT博文共享,知识的海洋

 
 
 

日志

 
 

window下 php 定时执行  

2013-11-22 17:17:43|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

需求背景

在一个论坛系统中,用户提交的评论如果管理审核才会显示。同时,有这么一个规则,如果此条评论在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:



运行正确。

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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