PHP后台运行

2012-05-02 18:01 / 5 comments / 29 views /

在很多时候,我们需要通过用户或其他方式触发php脚本的运行,而php执行的是批量任务或者是很耗时间的操作,这样我们就想客户端断开连接,而php的代码照样执行,起到异步操作的效果。

下面这段代码,可以使用header(“Connection: close”),使浏览器关闭连接,并保持php继续执行后继脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ob_end_clean();//清除缓冲内容
header('HTTP/1.1 200 Ok');
header("Connection: close");//连接关闭
ob_start();
echo 'running';
$size=ob_get_length();
header("Content-Length: $size");
ob_end_flush();//输出缓冲
flush();
 
sleep(10);
set_time_limit(0);
$f=fopen('test.txt','a+');
fwrite($f,date()." ");//当然这一句可以写成循环,wp好像过滤了循环代码,为了保证可执行改为非循环的了

前两个header的作用是分别告诉浏览器获取网页成功,而且不用继续保持连接了,因为我们服务器已经主动要求close了。

最重要的还是这第三个header,告诉浏览器这个网页文件的长度。只有这样浏览器才会接收到相应长度的信息后中断连接,表现为浏览器已经把内容输出了,而且没有那种等待获取数据的状态。这个脚本不受Transfer-Encoding: chunked状态的影响。

sleep后面其实就是想在后台处理的代码,这个就看各种的应用了,此代码直接复制即可使用!

下面使用ignore_user_abort(true):

1
2
ignore_user_abort(true);
set_time_limit(0);

下面是用pclose启动一个后台进程运行:

1
pclose(popen("start php myscript.php", "r"));

Related Posts

  1. 用于生成RSSFeed的PHP库
  2. vim命令速查表
  3. 输出文本中最长的一行
  4. Go语言文件操作
  5. Linux, Iometer / Dynamo usage
  6. PHP实现缓存(cache)的方法
  7. 使用自定义域为wordpress做SEO
  8. A Sock 5 Proxy Server Written in Golang
  9. Go语言单元测试
  10. LaTeX生成PDF标签

Get a Trackback link

5 Comments

  1. 知蚁博客2012年5月2日 23:53:

    不错的功能~

  2. Jian Zhou2012年5月3日 10:34:

    脚本间共享数据好像很麻烦,有没有什么好的建议没?

  3. moper2012年5月8日 6:16:

    好久没来你这里,踩踩哈~

  4. moper2012年5月9日 20:38:

    谢谢回访哈,博客最近在折腾,会不稳定,抱歉~

  5. moper2012年5月9日 20:39:

    话说……你博客的时间好像不对,要调整一下时区吧?

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>