步骤如下:
单击"开始"按钮,然后依次选择"程序"→"附件"→"系统工具"→"任务计划"(或者是"设置"→"控制面板"→"任务计划"),启动Windows 2000的任务计划管理程序。
在"任务计划"窗口中双击"添加任务计划"图标,启动系统的"任务计划向导",然后单击"下一步"按钮,在给出的程序列表中选择需要自动运行的应用程序,然后单击"下一步"按钮。
设置适当的任务计划名称并选择自动执行这个任务的时间频率(如每天、每星期、每月、一次性、每次启动计算机时、每次登录时等),然后单击"下一步"按钮。此时系统将会要求用户对程序运行的具体时间进行设置,如几号、几点钟、哪几个时间段才能运行等,我们只需根据自己的需要加以设置即可。
接下来系统将会要求用户设置适当的用户名及密码(如图5所示),以便系统今后能自动加以运行。
最后,我们只需单击"完成"按钮即可将相应任务添加到Windows 2000的任务计划程序中,此后它就会自动"记住"这个任务,一旦系统时间及相关条件与用户设置的计划相符,它就会自动调用用户所指定的应用程序,十分方 便(每次启动Windows 2000的时候,任务计划程序都会自动启动,并在后台运行,确保用户的计划能够按时执行)。
测试一下刚才所建的任务是否成功,鼠标右键单击"php"程序图标(如图6所示),在弹出的菜单里面选择"运行"。一般情况下程序图标只要这样 激活运行就可以正常启动。如果运行失败可查看用户和密码是否设置正确,还有确定"Task Scheduler"服务是否已启动,本人当初就是为了节省系统资源把它关掉了导致运行失败,害我找了大半天。另外也可从"系统日志"里查看到底是什么原 因造成运行失败的。
下面将介绍两个例子:
一、让PHP定时运行
文件test.php:
<?php
$fp = @fopen("test.txt", "a+");
fwrite($fp, date("Y-m-d H:i:s") . " 让PHP定时运行吧!\n");
fclose($fp);
?>
添加一个任务计划,输入命令:
D:\php4\php.exe -q D:\php4\test.php
时间设置为每隔1分钟运行一次,然后运行这个任务。
现在来看看d:\php4\test.txt文件的内容时候是否成功。
如果内容为如下所示,则表示成功:
2013-6-13 11:08:01 让PHP定时运行吧!
2013-6-13 11:09:02 让PHP定时运行吧!
2013-6-13 11:10:01 让PHP定时运行吧!
2013-6-13 11:11:02 让PHP定时运行吧!
二、让MYSQL实现自动备份
文件backup.php,如果要压缩可以拷贝一个rar.exe:
<?php
if ($argc != 2 || in_array($argv[1], array('--help', '-?'))) {
?>
backup Ver 0.01, for Win95/Win98/WinNT/Win2000/WinXP on i32
Copyright (C) 2000 ptker All rights reserved.
This is free software,and you are welcome to modify and redistribute it
under the GPL license
PHP Shell script for the backup MySQL database.
Usage: <?php echo $argv[0]; ?> <option>
<option> can be database name you would like to backup.
With the --help, or -? options, you can get this help and exit.
<?php
} else {
$dbname = $argv[1];
$dump_tool = "c:\\mysql\\bin\\mysqldump";
$rar_tool = "d:\\php4\\rar";
@exec("$dump_tool --opt -u user -ppassword $dbname > ./$dbname.sql");
@exec("$rar_tool a -ag_yyyy_mm_dd_hh_mm $dbname.rar $dbname.sql");
@unlink("$dbname.sql");
echo "Backup complete!";
}
?>
添加一个任务计划,输入命令:
D:\php4\php.exe -q D:\php4\backup.php databasename
时间设置为每天运行一次,然后运行这个任务。
最后会在d:\php4\目录下生成一个以数据库名和当前时间组成的rar文件。
当然备份方式有很多种,读者可按照自己喜欢的去做!
如果出现错误:
在试着设置任务帐户信息时出现错误
指定的错误是:
0x80070005:拒绝访问
您没有运行所请求的操作的权限
在上面'"4.接下来系统将会要求用户设置适当的用户名及密码,以便系统今后能自动加以运行".这里最好用"system"用户,密码可为空.
这个system的权限非常之高,比你的administrator还要高,所以你在运行命令的时候千万不要乱来,这个可是什么提示都没有就会无条件执行的,这个权限下你kill核心进程都行.
上面2、添加一个任务计划,在这一步输入命令:
D:\php4\php.exe -q D:\php4\test.php
正确的方式应为
"D:\php4\php.exe" -q "D:\php4\test.php"
说明:路径要用双引号括住,这点不要搞错了哦。
php中的ignore_user_abort();函数搭配set_time_limit(0);和sleep($interval);即时实现定时执行相关任务。
先来个简单的例子:
//php定时计划任务
//by www.
ignore_user_abort(); // 函数设置与客户机断开是否会终止脚本的执行
set_time_limit(0); // 来设置一个脚本的执行时间为无限长
$interval=30;
do{
$fp = fopen(‘text3.txt’,'a’);
fwrite($fp,’test’);
fclose($fp);
sleep($interval); // 函数延迟代码执行若干秒
}while(true);
?>
首先,运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。
最后介绍下php手册中的相关的知识:
1.连接处理:
在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:
1 – ABORTED(异常退出)
2 – TIMEOUT(超时)
当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。
可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户 端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的”php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。
脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的”php_value max_execution_time”参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调 用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。
注意:ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。
就是这些了,希望有助于大家理解与掌握php定时计划任务的实现方法。
PHP定时计划任务需要两个文件。
1,xxx.conf.php
//当为0时,关闭计划任务
return 1;
?>
2,xxx.php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*3;// 每隔3分钟运行
$ii=0;
do{
$run = include 'jhrw.conf.php';
if(!$run) {
file_put_contents("tasktest.txt","==计划任务已结束==\r\n",FILE_APPEND);
die('Job has ended.');
}
//此入放要执行的代码
sleep($interval);// 等待3分钟
$nowTime = date("Y-m-d H:m:s");
$data="$ii>计划任务正在运行中...(运行状态:$run) $nowTime\r\n";
file_put_contents("tasktest.txt", $data,FILE_APPEND);
$ii++;
}while(true);
//by www.
?>
主要改变xxx.conf.php中return 0即可实现控制这个计划任务的关闭。