能继续执行的php函数,函数之计划任务实现方法
分类:面向对象

多的不说,直接上代码:
复制代码 代码如下:
ignore_user_abort(true); //设置客户端断开连接时是否中断脚本的执行
set_time_limit(0);
$file = '/tmp/ignore_user.txt';
if(!file_exists($file)) {
file_put_contents($file);
}
if(!$handle = fopen($file,'a+b')){
echo "not open file :".$file;
exit;
}
$i=0;
while($i<100) {
$time = date("Y-m-d H:i:s",time());
echo $time."n";
if(fwrite($handle,$time."n")===false) {
echo "not write file:".$file;
exit;
}
echo "write file time:".$time."n";
$i++;
sleep(2);
}
fclose($handle);

php ignore_user_abort

这是一个简单的用php 实现的模板教程物。

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

class TEMPLATE { private $path = . ; #根目录 private $var; private $tplDir = template; #模板存储目录 private $tplExt = tpl; #模板文件的后缀名 private $tplId = 0 ; #模板的ID号 private $compileDir = template_c; #编译后的php文件存放目录 private $isCache=false ; #是否用缓存 private $cacheId = 1; #缓存文件ID号 private $cacheLeftTime=3600; #缓存有效期 (默认保存3600秒) private $cacheDir = cache; #缓存文件存储目录 private $autoRefresh = false ; #是否自动刷新 private $pattern = array( /({dw:)s*includes*filename=s*(.+..+)s*s*(/})/i,#包含文件 /({dw:)s*field.(.+)s*(/})/i,#局部变量 /({dw:)s*global.(.+)s*(/})/i,#全局变量 /({dw:)s*foreachs*(.+)s*ass*(.+)s*(/})/i,#foreach 语句 /({dw:)s*ends*foreachs*(/})/i, #foreach 结束 /({dw:)s*ifs*((.+))(/})/i, /({dw:)s*elseifs*((.+))(/})/i, /({dw:)s*elses*(/})/i, /({dw:)s*ends*ifs*(/})/i, ); private $replacement = array( '?php echo $this-inc_file(/2); ?', ?php echo $/2;?, ?php global $/2;n echo $/2; ?, ?php foreach($/2 as $/3){ ?, ?php } ?, ?php if (/2) { ? , ?php }else if(/2){ ?, ?php }else{ ?, ?php } ?, ); #构造函数 function __construct($path = , $tplDir=, $compileDir=,$isCache=,$cacheLeftTime=,$cacheDir= ,$autoRefresh=) { $this-path = $path ? $path : $this-path ; $this-tplDir = $tplDir ? $tplDir : $this-tplDir ; $this-compileDir = $compileDir ? $compileDir : $this-compileDir ; $this-isCache = is_bool($isCache) ? $isCache : $this-isCache ; $this-cacheLeftTime = $cacheLeftTime ? $cacheLeftTime : $this-cacheLeftTime ; $this-cacheDir = $cacheDir ? $cacheDir : $this-cacheDir ; $this-autoRefresh = is_bool($autoRefresh) ? $autoRefresh : $this-autoRefresh ; } #兼容php4 function TEMPLATE($path = , $tplDir=, $compileDir=,$isCache=,$cacheLeftTime=,$cacheDir= ,$autoRefresh=) { $this-__construct($path = , $tplDir=, $compileDir=,$isCache=,$cacheLeftTime=,$cacheDir= ,$autoRefresh=); } function __get($property) { return $this-$property ; } function __set($property,$value) { return $this-$property = $value ; } #给模板中的变量赋值 # $tplVal 模板中的变量名 function assign($tplVal ,$value=) { if (is_array($tplVal)) { foreach ($tplVal as $key = $val) { if (!empty($key)) $this-var[$key] = $val ; } } else { if (!empty($tplVal)) $this-var[$tplVal] = $value ; } } #输出文件内容函数 function display($tplFile,$tplId=0,$cacheId = 1,$cacheLeftTime=) { if (empty($tplFile)) die(Template {$tplFile} not exist !); $this-cacheId = $cacheId ? md5($cacheId) : md5($this-cacheId); $cacheFile = $this-path. /.$this-cacheDir./.$tplFile.$this-cacheId ; if ($this-check_cache($cacheFile,$cacheLeftTime)) #当缓存文件存在且不过期时直接从缓存文件读取内容 { echo $this-read_file($cacheFile); }else { $tpl = $this-path./.$this-tplDir./.$tplFile...$this-tplExt; $tplContent = $this-read_file($tpl); #读取模板文件的内容 $compileContent= $this-compile_file($tplContent); #对读取出来的文件进行编译 $this-tplId = $tplId ? $tplId : $this-tplId ; $compileFile = $this-path./.$this-compileDir./.md5($this-tplId)..$tplFile..php; $this-write_file($compileFile,$compileContent);#将编译后的内容写入相应的文件中; @extract($this-var); ob_start(); include_once($compileFile); $content = ob_get_contents() ; ob_end_clean() ; if ($this-isCache){ $this-write_file($cacheFile,$content) ;# 帮编译好的内容写入缓存文件 } echo $content ; } } /* function trim_tag($content) { $content = str_replace($this-startTag,,$content); $content = str_replace($this-endTag,,$content); //$content = trim($content); return $content ; }*/ # 编译文件函数 function compile_file($content=null) { $content = $content ? $content :die(Compile fail!) ; //$content = $this-trim_tag($content); $content = preg_replace($this-pattern,$this-replacement,$content); return $content; } #解析包含文件 function inc_file($filename,$tplId=,$cacheId=,$cacheLeftTime=) { $file = $this-path./.$this-tplDir./.$filename ; if (file_exists($file)) { $filename = str_replace(..$this-tplExt,,$filename); return $this-display($filename,$tplId,$cacheId,$cacheLeftTime); } else die(Template {$filename} not exist); } #读取文件内容函数 function read_file($filename) { if (!file_exists($filename)) die(Read file fail) ; return file_get_contents($filename); } #内容写入函数 function write_file($filename,$content,$mode=wb) { $filename = trim($filename); $content = $content ? stripslashes(trim($content)) : exit(); if (!file_exists($filename)) { $array = explode(/,$filename); $count = count($array); $path = ; for ($i = 0 ; $i $count-1 ; ++$i ) { if(!file_exists($path .= $array[$i]./)) { mkdir($path,0777); } } } $handle = fopen($filename,$mode) ; fwrite($handle,$content); fclose($handle); return true; } # 清除缓存 function clear_dir($dir=) { $dir = $this-path./.$dir; $handle = opendir($dir); if (file_exists($dir)) { while ($file = readdir($handle)) { if ($file !=. $file != ..) unlink($dir./.$file); } closedir($handle); return true; } else { return false; } } #清除所有缓存 function clear_all_cache() { if ($this-clear_dir($this-cacheDir) $this-clear_dir($this-compileDir)) return true; } #检查缓存是否过期 function check_cache($cacheFile,$cacheLeftTime=) { $cacheLeftTime = $cacheLeftTime ? $cacheLeftTime : $this-cacheLeftTime; if (!file_exists($cacheFile)) return false ; $time = $this-get_time($cacheFile) + $cacheLeftTime ; if ($time time()) { unlink($cacheFile); return false; } return true; } # 获取文件最后编辑时间 function get_time($filename) { if (!file_exists($filename)) return false; return filemtime($filename); } }

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

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

函数定义
  int ignore_user_abort ([ string $value ] )

参数 描述
setting 可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。
如果未设置该参数,会返回当前的设置。

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

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

 

 <?php

  // Ignore user aborts and allow the script

  // to run forever

  ignore_user_abort (true);

  set_time_limit (0);

  echo 'Testing connection handling in PHP' ;

  // Run a pointless loop that sometime

  // hopefully will make us click away from

  // page or click the "Stop" button.

  while(1)

  {

  // Did the connection fail?

  if( connection_status () != CONNECTION_NORMAL )

  {

  break;

  }

  // Sleep for 10 seconds

  sleep (10);

  }

  // If this is reached, then the 'break'

  // was triggered from inside the while loop

  // So here we can log, or perform any other tasks

  // we need without actually being dependent on the

  // browser.

  ?>

实例 1、

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

ignore_user_abort(true);       //设置客户端断开连接时是否中断脚本的执行      

    set_time_limit(0);
         $file = '/tmp/ignore_user.txt';
         if(!file_exists($file)) {
                 file_put_contents($file);
         }
         if(!$handle = fopen($file,'a+b')){
                 echo "not open file :".$file;
                 exit;
         }
         $i=0;
         while($i<100) {
                 $time = date("Y-m-d H:i:s",time());
                 echo $time."n";
                 if(fwrite($handle,$time."n")===false) {
                         echo "not write file:".$file;
                         exit;
                 }
                 echo "write file time:".$time."n";
                 $i++;
                 sleep(2);
         }
 
fclose($handle);

加上这段代码,即使你把浏览器关闭后还是能还执行php计划任务哦。

本文由10bet手机官网发布于面向对象,转载请注明出处:能继续执行的php函数,函数之计划任务实现方法

上一篇:MYSQL时间戳如何转化为一般时间格式 下一篇:php读取文件内容至字符串中,sed在某一行前面
猜你喜欢
热门排行
精彩图文