php ignore_user_abort()函数之计划任务实现方法

php ignore_user_abort

函数说明(PHP 4中,PHP 5中)

ignore_user_abort 设置与客户机断开是否会终止脚本的执行.

本函数返回 user-abort 设置的之前的值(一个布尔值).

函数定义

int ignore_user_abort ([ string $value ] )

参数 描述

setting 可选.如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行.

如果未设置该参数,会返回当前的设置.

提示注释

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

实例说明

例-1 一个的ignore_user_abort()的例子,配合set_time_limit()函数 和一个死循环就可以实现计划任务功能.

  1. <?php
  2.  // Ignore user aborts and allow the script
  3.  // to run forever
  4.  ignore_user_abort (true);
  5.  set_time_limit (0);
  6.  echo 'Testing connection handling in PHP' ;
  7.  // Run a pointless loop that sometime
  8.  // hopefully will make us click away from
  9.  // page or click the "Stop" button.
  10.  while(1)
  11.  {
  12.  // Did the connection fail?
  13.  if( connection_status () != CONNECTION_NORMAL )
  14.  {
  15.  break;
  16.  }
  17.  // Sleep for 10 seconds
  18.  sleep (10);
  19.  }
  20.  // If this is reached, then the 'break'
  21.  // was triggered from inside the while loop
  22.  // So here we can log, or perform any other tasks
  23.  // we need without actually being dependent on the
  24.  // browser.
  25.  ?>

实例 1、

关闭浏览器后,程序能继续在后台跑,这种情况下需要用到ignore_user_abort()函数;

  1. ignore_user_abort(true); //设置客户端断开连接时是否中断脚本的执行
  2. set_time_limit(0);
  3. $file = '/tmp/ignore_user.txt';
  4. if(!file_exists($file)) {
  5. file_put_contents($file);
  6. }
  7. if(!$handle = fopen($file,'a+b')){
  8. echo "not open file :".$file;
  9. exit;
  10. }
  11. $i=0;
  12. while($i<100) {
  13. $time = date("Y-m-d H:i:s",time());
  14. echo $time."\n";
  15. if(fwrite($handle,$time."\n")===false) {
  16. echo "not write file:".$file;
  17. exit;
  18. }
  19. echo "write file time:".$time."\n";
  20. $i++;
  21. sleep(2);
  22. }
  23. fclose($handle);
加上这段代码,即使你把浏览器关闭后还是能还执行php计划任务哦.