PHP实现定时任务的几种方式和详解语言开发,PHP的实现决定了它没有Java、.Net等AppServer的概念,http协议是无状态协议。PHP只能由用户触发,调用后会自动退出内存。没有驻留内存。如果非要用PHP来实现定时任务,有以下几种方案:1.简单直接鲁莽cron.phpignore_user_abort();//关闭浏览器,PHP脚本可以继续执行set_time_limit(0);//通过set_time_limit(0),程序可以不受限制地执行$interval=60*30;//每半小时运行一次do{$run=include'config.php';if(!$run)die('进程中止');//ToDosleep($interval);//等待5分钟}while(true);通过更改config.php的返回0来停止程序。一种可行的方式是在config.php文件中与一个特殊的表单进行交互,通过HTML页面配置一些变量。缺点:占用系统资源,运行时间长,会出现一些意想不到的隐患。例如,内存管理问题。三。简单改进php脚本休眠一段时间,通过访问自身继续执行。就像一场接力赛。。这样可以保证每个PHP脚本的执行时间不会太长。它不受time_out的限制。因为php文件的每个循环都是独立执行的,所以这种方式避免了time_out的限制。但是最好加上控制代码。cofig.php如上所述,以便它可以终止进程。4.服务器定时任务Unix平台如果你使用的是Unix系统,你需要在你的PHP脚本的最前面加上一行特殊的代码,让它能够执行,这样系统才能知道要用什么程序运行脚本.为Unix系统添加的第一行代码不会影响脚本在Windows下的运行,所以也可以使用这种方式编写跨平台的脚本。1、使用PHP在Crontab中执行脚本就像在Crontab中调用普通的shell脚本(具体的Crontab用法),使用PHP程序调用PHP脚本,每小时执行一次myscript.php如下:#crontab-e00****/usr/local/bin/php/home/john/myscript.ph/usr/local/bin/php是PHP程序的路径。2.使用URL在Crontab中执行脚本如果你的PHP脚本可以通过URL触发,你可以使用lynx或者curl或者wget来配置你的Crontab。以下示例通过使用Lynx文本浏览器访问URL每小时执行一个PHP脚本。Lynx文本浏览器默认以对话方式打开URL。但是,如下所示,我们在lynx命令行上使用-dump选项将URL的输出转换为标准输出。00****lynx-dumphttp://www.sf.net/myscript.php以下示例使用CURL访问URL以每5分钟执行一次PHP脚本。默认情况下,Curl在标准输出上显示输出。使用“curl-o”选项,您还可以将脚本的输出转储到临时文件temp.txt。*/5****/usr/bin/curl-otemp.txthttp://www.sf.net/myscript.php以下示例使用WGET访问URL,每隔10分钟执行一个PHP脚本。-q选项表示安静模式。“-Otemp.txt”表示输出被发送到一个临时文件。*/10****/usr/bin/wget-q-Otemp.txthttp://www.sf.net/myscript.php5.ini_set函数用法详解PHPini_set用于设置值php.ini,在函数执行时生效,脚本结束后设置失效。不用打开php.ini文件就可以修改配置,对于虚拟空间来说非常方便。函数格式:stringini_set(string$varname,string$newvalue)不是所有的参数都可以配置,可以查看手册中的列表。常用设置:@ini_set('memory_limit','64M');menory_limit:设置脚本可以申请内存的最大字节数,有助于编写不好的脚本消耗服务器上的可用内存。@符号代表不输出错误。@ini_set('display_errors',1);display_errors:设置错误信息的类别。@ini_set('session.auto_start',0);session.auto_start:是否自动开启session处理,当设置为1时,程序不使用session_start()手动开启session或使用session,若参数为0,而且没有手动打开session会报错。@ini_set('session.cache_expire',180);session.cache_expire:指定会话页面在客户端缓存中的限制时间(分钟)。默认值为180分钟。如果设置了session.cache_limiter=nocache,这里的设置是无效的。@ini_set('session.use_cookies',1);session.use_cookies:是否在客户端使用cookie保存sessionID;@ini_set('session.use_trans_sid',0);session.use_trans_sid:是否使用明文在URL中显示SID(SessionID),默认禁用,因为这会给你的用户带来安全风险:用户可能会通过email/irc/告诉别人包含有效sid的URLQQ/MSN等渠道。包含有效sid的URL可能存储在公共计算机上。用户可以将具有固定SID的URL保存在他们的收藏夹或浏览历史记录中。基于URL的会话管理总是比基于cookie的会话管理更具风险,应该禁用。PHP定时任务是一个很有意思的东西。以上是本文提供的一些解决方案。您也可以通过本文中的思路开发自己的解决方案。希望能帮助到所有有需要的人。以上内容希望对大家有所帮助。很多PHPer在进阶的时候总会遇到一些问题和瓶颈。业务代码写多了就没有方向感。架构视频资料与大厂PHP访谈PDF|免费获取关注公众号:PHP开源社区
