小兔网

php中怎么实现后台执行?

php中实现后台执行的方法:

ignore_user_abort(true); // 后台运行

set_time_limit(0); // 取消脚本运行时间的超时上限

后台运行的后面还要,set_time_limit(0);除非在服务器上关闭这个程序,否则下面的代码将永远执行下去止到完成为止。

如果程序运行不超时,在没有执行结束前,程序不会自动结束的。

语法:int ignore_user_abort ( [bool setting] ) 

这个函数的作用是指示服务器端在远程客户端关闭连接后是否继续执行下面的脚本。

setting 参数是一个可选参数。如设置为True,则表示如果用户停止脚本运行,仍然不影响脚本的运行(即:脚本将持续执行);如果设置为False,则表示当用户停止运行脚本程序时,脚本程序将停止运行。

注释:PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。

下面这个例子,在用户关闭浏览器后,该脚本仍然后在服务器上继续执行:

ignore_user_abort(true); // 后台运行
set_time_limit(0); // 取消脚本运行时间的超时上限
do{
sleep(60); // 休眠1分钟
}while(true);
?>

除非在服务器上关闭这个程序,否则这断代码将永远执行下去。

用ignore_user_abort函数实现php计划任务,代码如下:

<?php
ignore_user_abort(true);
set_time_limit(0);
while(1) {
  $fp = fopen('time_task.txt',"a+");
  $str = date("Y-m-d h:i:s")."\n\r";
  fwrite($fp,$str);
  fclose($fp);
  sleep(30*60); //半小时执行一次
}
?>

 

PHP 断开请求继续执行

set_time_limit(0);
ini_set('memory_limit', '-1');
ignore_user_abort(true);
session_write_close();
header("Connection: close");
header("HTTP/1.1 200 OK");
ob_implicit_flush(true);