php 异步执行脚本程序代码
发布:smiling 来源: PHP粉丝网 添加日期:2014-07-18 10:55:40 浏览: 评论:0
这里说的异步执行是让php脚本在后台挂起一个执行具体操作的脚本,主脚本退出后,挂起的脚本还能继续执行,比如执行某些耗时操作或可以并行执行的操作,可以采用php异步执行的方式,主脚本和子脚本的通讯可以采用外部文件或memcached的方式,原理就是通过exec或system来执行一个外部命令,注意,本文所述的是针对Linux环境.
在Linux下要让一个脚本挂在后台执行可以在命令的结尾加上一个 "&" 符号,有时候这还不够,需要借助nohup命令,关于nohup,玩过Linux的人应该都知道,如果想让一个程序在后台运行,只要在执行命令的末尾加上一个&符号就可以了,但是这种方式不是很保险,有些程序当你登出终端后它就会停止,那么如何让一个程序真正永远在后台执行呢,答案就是使用 nohub 命令,格式为:
nohup 执行程序的命令 &
如果程序有输出,它会试着把输出写入执行上述命令的当前文件夹下的 nohup.out 文件中,当写入失败,就会写当前用户的$HOME目录下的nohup.out 中.
CLI环境和Web环境执行的操作还不太一样,先来说CLI环境,这里需要用上nohup和&,同时还要把指定输出,如果不想要输出结果,可以把输出定向到/dev/null中,现在来做一个测试,假设在一个目录中有main.php、sub1.php和sub2.php,其中sub1和sub2内容一样都让sleep函数暂停一段时间,代码如下:
- //main.php
- <?php
- $cmd = 'nohup php ./sub.php >./tmp.log &';
- exec($cmd);
- $cmd = 'nohup php ./sub1.php >/dev/null &';
- exec($cmd);
- ?>
- //sub1.php sub2.php
- <?php
- sleep(100000);
- ?>
上述文件中main.php是作为主脚本,在命令行中执行php main.php,可以看到main.php脚本很快就执行完并退出,在使用ps aux | grep sub命令搜索进程,应该可以在后台看到上述的两个子脚本,说明成功挂起了子脚本.
在Web环境下,执行php脚本都是Web服务器开启的cgi进程来处理,只要脚本不退出,就会一直占有该cgi进程,当启动的所有cgi进程都被占用完后就不能在处理新的请求,所以对那些可能会很费时的脚本,可以采用异步的方式,启动子脚本的方式和CLI差不多,必须要使用&和指定输出(只好是定向到/dev/null),但是不能使用nohup,例如如下代码:
- <?php
- $cmd = 'php PATH_TO_SUB1/sub1.php >/dev/null &';
- exec($cmd);
- $cmd = 'php PATH_TO_SUB1/sub2.php >/dev/null &';
- exec($cmd);
- ?>
当在浏览器中访问该脚本文件,可以看到浏览器里面响应完成,同时使用ps命令查看后台可以看到sub1和sub2脚本.
注意上述例子中如果php命令不在PATH中,需要指定命令完整的路径,推荐使用完整路径,特别是在Web下.
Tags: php 异步执行脚本程序
相关文章
- ·PHP中通过Web 执行C/C++应用程序(2013-11-13)
- ·用PHP实现Ftp用户的在线管理(2013-11-13)
- ·用PHP自动把纯文本转换成Web页面(2013-11-13)
- ·用实例分析PHP5异常处理(2013-11-13)
- ·php5的simplexml解析错误(2013-11-13)
- ·PHP后门的隐藏技巧测试报告(2013-11-13)
- ·PHP缓存技术详谈(2013-11-27)
- ·利用PHP自定义错误处理器处理出错信息(2013-11-27)
- ·PHP作wap开发时遇到的问题(2013-11-27)
- ·php编写大型网站问题集(2013-11-27)
- ·php测试性能代码(2013-11-28)
- ·php 安全register globals设置为TRUE的危害(2013-11-28)
- ·XSLTProcessor 中 registerPHPFunctions 后无法调用 php 函数(2013-11-30)
- ·PHP中常用三种缓存技术(2013-11-30)
- ·新浪微博PHP版SDK的导致20007错误(2013-12-03)
- ·linux中phpMyAdmin错误提示Wrong permissions on configuration file, should no(2013-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)