php计划任务的实现方法,支持windows/linux下运行

使用php让浏览器刷新需要解决几个问题
1.PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)
2.如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行
3.如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep使用程序休眠一会,然后在执行

 代码如下 复制代码

<?php

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.

set_time_limit(3000);// 通过set_time_limit(0)可以让程序无限制的执行下去

$interval=5;// 每隔5s运行

 

//方法1--死循环

do{

echo '测试'.time().'<br/>'; 

sleep($interval);// 等待5s 

}while(true);

 

//方法2---sleep 定时执行

require_once './curlClass.php';//引入文件

 

$curl = new httpCurl();//实例化

$stime = $curl->getmicrotime();

for($i=0;$i<=10;$i++){

 

echo '测试'.time().'<br/>'; 

sleep($interval);// 等待5s

 

}

ob_flush();

flush();

$etime = $curl->getmicrotime();

echo '<hr>';

echo round(($etime-stime),4);//程序执行时间

WINDOWS中设置计划任务执行PHP文件

在网上找了些WINDOWS执行PHP的计划任务的方法,有一个写得很全,可惜在我这竟然没通过。最后不得不综合各门派的方法,才能在我这运行成功。

1、写一个PHP程序,命名为test.php,内容如下所示:

 

 代码如下 复制代码

<?

$fp = fopen("test.txt", "a+");

 fwrite($fp, date("Y-m-d H:i:s") . " 成功成功了!n");

 fclose($fp);

?>

程序大胆地写,什么includerequire尽管用,都没问题
2、新建Bat文件,命名为test.bat,内容如下所示:

 代码如下 复制代码
1 D:phpphp.exe -q D:websitetest.php

//相应目录自己改上

3、建立WINDOWS计划任务:
开始–>控制面板–>任务计划–>添加任务计划
浏览文件夹选择上面的bat文件
设置时间和密码(登陆WINDOWS的)
保存即可了。
4、over! 可以右键计划任务点“运行”试试

Linux的Crontab执行PHP脚本

一、在Crontab中使用PHP执行脚本
就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。
每一小时执行myscript.php如下:

 代码如下 复制代码

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php为PHP程序的路径。

二、在Crontab中使用URL执行脚本
如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。

 代码如下 复制代码
00 * * * * lynx -dump http://www.centos.bz/myscript.php

下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。

 代码如下 复制代码
*/5 * * * * /usr/bin/curl -o temp.txt http://www.centos.bz/myscript.php

下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件。

 代码如下 复制代码
*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.centos.bz/myscript.php

 

php定时计划任务介绍2010-05-06 10:10以前对se特别感兴趣,但是自己又不会java,lucene等搜索引擎开发工具,于是不断挖掘php的功效。

最后发现php也可以做抓取,并且原理很易:直接获取页面源文件,然后通过正则或字符串的参照截取来获取需要的信息。但是性能上不能和搜索引擎的多线程抓取相比。

实现了上一步之后,又思考着,如果抓取可以自动定时获取,那么人工运行可执行页面也就省下来了。

后来也在一些php开源程序中了解到关于"计划任务"的效果:可以定时运行某程序,比如数据库备份,更新缓存,生成静态页面,生成网站地图等。

最近由于项目需要定时更新远程数据库到本地,网上搜了搜,还真找到了。

ignore_user_abort();函数搭配set_time_limit(0);和sleep($interval);即可实现以上自动更新。

先给出一个基本的范式,其中有个人的测试程序:

 代码如下 复制代码

<?php
ignore_user_abort(); // run script in background
set_time_limit(0); // run script forever
$interval=30; // do every 15 minutes...
do{
$fp = fopen('text3.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // wait 15 minutes
}while(true);
?>

首先运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。

个人感觉PHP定时执行任务的效率不是很高,建议关于定时执行任务的工作还是交给shell来做吧,比较那才是王道

时间: 2024-10-25 02:53:48

php计划任务的实现方法,支持windows/linux下运行的相关文章

Java项目导出为jar包,并在windows/linux下运行

Java项目导出为jar包,项目文件结构: 在你的项目的根目录下新建一个文件:MANIFEST.MF和一个lib文件夹(该文件夹放的是用的第三方包).文件内容是这样的: Manifest-Version: 1.0 Main-Class: test.DeltaMakeIndexTest  (此处需要根据main函数所在类做相应修改,包名.类名 格式) Class-Path: ./ ./lib/sqljdbc.jar ./lib/IKAnalyzer3.2.3Stable.jar ./lib/luc

python-PYTHON 是在linux下运行好 还是windows下运行好?

问题描述 PYTHON 是在linux下运行好 还是windows下运行好? 用Python做web 有32位 64位限制吗? 解决方案 python本身无所谓,取决于你的程序,如果是服务器程序,或者是嵌入式程序,要求运行在linux环境下,就只能用linux,如果是客户端脚本,使用它的用户使用windows,那么就运行在windows下. 除非用到科学计算和很多内存(2GB+),否则32bit足够了.python是解释语言,所以只要有解释器,任何平台都没问题. 解决方案二: crossplan

《操作系统真象还原》——0.14 为什么Linux系统下的应用程序不能在Windows系统下运行

0.14 为什么Linux系统下的应用程序不能在Windows系统下运行 其实,Windows下的程序也无法直接在Linux下运行. 对于这个问题,很多同学都会马上给出答案:格式不同.其实--答对啦,确实是格式不同,不过这只是一方面,还有另一方面,系统API不同,API即Application Programming Interface,应用程序编程接口. 先说说格式.其实格式也算是协议,就是在某个固定的位置有固定意义的数据.Linux下的可执行程序格式是elf,也就是 "Executable

如何在 windows 7下运行 android?

问题描述 如何在 windows 7下运行 android? 我在 Windows 7 环境下安装了 android sdk.但是当我运行它时,有错误提示说 xcopy 不能作为命令被识别.如何解决这个问题? C:>android.bat 'xcopy' is not recognized as an internal or external command, operable program or batch file. Usage: java [-options] class [args..

c-用什么方法可以知道linux下跑的程序的返回值?

问题描述 用什么方法可以知道linux下跑的程序的返回值? 比如 aaa.c main() { return 123; } 编译成aaa 如果 ./aaa 以后,我想获得123,应该怎么做?谢谢各位大神 用C,用shell都行! 解决方案 这种返回值应该是没法知道的,Linux下运行程序是有系统返回值的,就是返回-1 0 之类的代表程序运行正确或者失败,如果可以,你可以加日志之类的将程序返回值打印出来就可以了 解决方案二: 脚本里面,$?就是上次执行的程序的返回值 解决方案三: 用管道就可以了,

这个程序在windows平台下能正常输出,结果也是对的。到linux下运行在50行产生数组溢出是怎么回事呢

问题描述 importjava.io.*;importjava.util.*;publicclassRout{publicstaticvoidmain(String[]args){//StringfilePath="d:\java\javatest\rout.txt";intreadLine[];readLine=newint[14];StringreadResult[]=newString[14];BufferedReaderreader=null;try{FileReaderfil

Windows/Linux下引用jar包,并用javac/java编译运行

Windows/Linux下引用jar包,并用javac/java编译运行,有需要的朋友可以参考下.   1> Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, java源文件放在D:/test/src目录下,名字为t2.java. 编译: javac -cp d:/test/t1.jar d:/test/src/t2.java 运行: java -cp d:/test/t1.jar;d:/test/src t2 注意,分号后面没有空格,否则报错.   需要注意的

删除SVN三种方法delSvn(windows+linux)_其它综合

一.在linux下 删除这些目录是很简单的,命令如下 find . -type d -name ".svn"|xargs rm -rf 或者 find . -type d -iname ".svn" -exec rm -rf {} \; 二.在windows下用以下法子: 1.在项目平级的目录,执行dos命令: xcopy project_dir project_dir_1 /s /i 2.或者在项目根目录执行以下dos命令 for /r . %%a in (.)

solr windows linux 下环境搭建

solr不是一个应用而是一个插件,不分linux和windows版本,是对luence的一个封装 windows下搭建 这里忽略java安装和tomcat安装,这里使用的是solr-4.10.0   1.到apache下载solr,地址: http://mirrors.hust.edu.cn/apache/lucene/solr/   2.解压出solr-4.10.0   3.复制solr-4.10.0\example\webapps中的solr.war文件到tomcat安装目录中的webapp