php计划任务之ignore_user_abort函数实现

 更新时间:2016年11月25日 16:24  点击:1978
PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。
 代码如下 复制代码

<?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")."nr";
   fwrite($fp,$str);
   fclose($fp);
   sleep(5);    //半小时执行一次
 }
 ?>


定义和用法
ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。

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

语法
ignore_user_abort(setting)参数 描述
setting 可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。

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

 

这里有一篇文章大家可以参考一下

http://www.111cn.net/phper/php/php-ignore_user_abort.htm

文章利用了socket来实现异步调用哦,有需要学习socket的朋友可以参考一下本文章以及参考资料哦。
 代码如下 复制代码

<?
 $host = "www.111cn.net";
 $path = "/Report.php?ReportID=1";
 $cookie = Session_id();
 
 $fp = fsockopen($host, 80, $errno, $errstr, 30);
 if (!$fp) {
    print "$errstr ($errno)<br />n";
    exit;
 }
 $out = "GET ".$path." HTTP/1.1rn";
 $out .= "Host: ".$host."rn";
 $out .= "Connection: Closern";
 $out .= "Cookie: ".$cookie."rnrn";
 
 fwrite($fp, $out);  //将请求写入socket
 //也可以选择获取server端的响应
 /*while (!feof($fp)) {
     echo fgets($fp, 128);
 }*/
 //如果不等待server端响应直接关闭socket即可
 fclose($fp);
 ?>

更详细关于php socket可以参考

http://www.111cn.net/phper/30/7cadb3c9195ac7d8ac9104da61a25c6e.htm

本文章介绍了一个简单的关于php入门篇-缓存技术简单应用,有需要的朋友可以看看哦,这里是利用了ob_start(); ob_end_flush(); 来实例的。
 代码如下 复制代码

<?php
// define the path and name of cached file
$cachefile = 'cached-files/'.date('M-d-Y').'.php';
// define how long we want to keep the file in seconds. I set mine to 5 hours.
$cachetime = 18000;
// Check if the cached file is still fresh. If it is, serve it up and exit.
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
include($cachefile);
exit;
}
// if there is either no file OR the file to too old, render the page and capture the HTML.
ob_start();
?>
<html>
output all your html here.
</html>
<?php
// We're done! Save the cached content to a file
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
// finally send browser output
ob_end_flush();
?>
本文章要介绍了这篇文章是一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看。
 代码如下 复制代码

 

$dowmFile = dirname ( __FILE__ ) . '/Nokia - Always Here.mp3'; //要下载的文件,绝对或相对
$dowmName = 'Nokia - Always Here.mp3';
ob_start ();
getlocalfile ( $dowmFile, $dowmName );
flush ();
ob_flush ();
function getlocalfile($fname, $filename = '') {
  $fsize = filesize ( $fname );
  header ( 'Cache-Control: public' );
  header ( 'Pragma: public' );
  header ( 'Accept-Ranges: bytes' );
  header ( 'Connection: close' );
  header ( 'Content-Type: ' . MIMEType ( $fname ) );
  //header('Content-Type: application/octet-stream');
  if (isset ( $filename {0} )) {
    header ( 'Content-Disposition: attachment;filename=' . $filename );
  }
  if ($fp = @fopen ( $fname, 'rb' )) {
    $start = 0;
    $end = $fsize;
    $isRange = isset ( $_SERVER ['HTTP_RANGE'] ) && ($_SERVER ['HTTP_RANGE'] != '');
    if ($isRange) {
      preg_match ( '/^bytes=([0-9]*)-([0-9]*)$/i', $_SERVER ['HTTP_RANGE'], $match );
      $start = $match [1];
      $end = $match [2];
      $isset_start = isset ( $start {0} );
      $isset_end = isset ( $end {0} );
      if ($isset_start && $isset_end) {
        //分块下载
        if ($start >= $fsize || $start < 0 || $start > $end) {
          $start = 0;
          $end = $fsize;
        } else if ($end >= $fsize) {
          $end = $fsize - $start;
        } else {
          $end -= $start - 1;
        }
      } else if ($isset_start && ! $isset_end) {
        //指定位置到结束
        if ($start >= $fsize || $start < 0) {
          $start = 0;
          $end = $fsize;
        } else {
          $end = $fsize - $start;
        }
      } else if (! $isset_start && $isset_end) {
        //最后n个字节
        $end = $end > $fsize ? $fsize : $end;
        $start = $fsize - $end;
      } else {
        $start = 0;
        $end = $fsize;
      }
    }
    if ($isRange) {
      fseek ( $fp, $start );
      header ( 'HTTP/1.1 206 Partial Content' );
      header ( 'Content-Length: ' . $end );
      header ( 'Content-Ranges: bytes ' . $start . '-' . ($end + $start - 1) . '/' . $fsize );
    } else {
      header ( 'Content-Length: ' . $fsize );
    }
    if (function_exists ( 'fpassthru' ) && ($end + $start) == $fsize) {
      fpassthru ( $fp );
    } else {
      echo fread ( $fp, $end );
    }
  } else {
    header ( 'Content-Length: ' . $fsize );
    readfile ( $fname );
  }
  //@header("Content-Type: ".mime_content_type($fname));
}
function MIMEType($fname) {
  $fileSuffix = strtolower ( substr ( $fname, strrpos ( $fname, '.' ) + 1 ) );
  switch ($fileSuffix) {
    case 'avi' :
      return 'video/msvideo';
    case 'wmv' :
      return 'video/x-ms-wmv';
    case 'txt' :
      return 'text/plain';
    case 'htm' :
    case 'html' :
    case 'php' :
      return 'text/html';
    case 'css' :
      return 'text/css';
    case 'js' :
      return 'application/javascript';
    case 'json' :
    case 'xml' :
    case 'zip' :
    case 'pdf' :
    case 'rtf' :
    case 'tar' :
      return 'application/' . $fileSuffix;
    case 'swf' :
      return 'application/x-shockwave-flash';
    case 'flv' :
      return 'video/x-flv';
    case 'jpe' :
    case 'jpg' :
      return 'image/jpeg';
    case 'jpeg' :
    case 'png' :
    case 'gif' :
    case 'bmp' :
    case 'tiff' :
      return 'image/' . $fileSuffix;
    case 'ico' :
      return 'image/vnd.microsoft.icon';
    case 'tif' :
      return 'image/tiff';
    case 'svg' :
    case 'svgz' :
      return 'image/svg+xml';
    case 'rar' :
      return 'application/x-rar-compressed';
    case 'exe' :
    case 'msi' :
      return 'application/x-msdownload';
    case 'cab' :
      return 'application/vnd.ms-cab-compressed';
    case 'aif' :
      return 'audio/aiff';
    case 'mpg' :
    case 'mpe' :
    case 'mp3' :
      return 'audio/mpeg';
    case 'mpeg' :
    case 'wav' :
    case 'aiff' :
      return 'audio/' . $fileSuffix;
    case 'qt' :
    case 'mov' :
      return 'video/quicktime';
    case 'psd' :
      return 'image/vnd.adobe.photoshop';
    case 'ai' :
    case 'eps' :
    case 'ps' :
      return 'application/postscript';
    case 'doc' :
    case 'docx' :
      return 'application/msword';
    case 'xls' :
    case 'xlt' :
    case 'xlm' :
    case 'xld' :
    case 'xla' :
    case 'xlc' :
    case 'xlw' :
    case 'xll' :
      return 'application/vnd.ms-excel';
    case 'ppt' :
    case 'pps' :
      return 'application/vnd.ms-powerpoint';
    case 'odt' :
      return 'application/vnd.oasis.opendocument.text';
    case 'ods' :
      return 'application/vnd.oasis.opendocument.spreadsheet';
    default :
      if (function_exists ( 'mime_content_type' )) {
        $fileSuffix = mime_content_type ( $filename );
      } else {
        $fileSuffix = 'application/octet-stream';
      }
      return $fileSuffix;
      break;
  }
}

本文章介绍了一个插件利用ffmpeg-php将视频格式转为flv格式,这样很多格式的视频我们都可以利用这个插件来实现格式转换哦。

以下是一个参考类,平台使用windows。

 代码如下 复制代码

define("ROOT_DIR",dirname(__FILE__));
class EcodeFlv {
var $fromFile;   //上传来的文件
var $toFilePath;  //保存文件路径
var $toPicPath;  //保存图片路径
var $mpeg; //ffmpeg程序文件的路径
var $mencode; //mencode程序文件的路径
var $cmdToFile; //转换文件命令
var $cmdToPic;  //转换图片命令
var $toFileName; //转换后的文件名
var $mpegComm; //ffmpeg.exe的转换命令
var $mencodeComm; //mencode.exe的命令
var $mpegType;
var $mencodeType;
var $midi; //mdi.exe的路径
var $cmdMidi; //mdi.exe的命令
//初始化类
function EcodeFlv($fromFile,$toFilePath,$toPicPath,$mpeg,$mencode,$midi) {
$this->mpegComm = false;
$this->mencodeComm = false;
$this->fromFile = $fromFile;
$this->toFilePath = $toFilePath;
$this->toPicPath = ROOT_DIR."/".$toPicPath;
$this->mpeg = ROOT_DIR.$mpeg;
$this->mencode = ROOT_DIR.$mencode;
$this->midi = ROOT_DIR.$midi;
$this->mpegType=array (
"audio/x-mpeg"=>".mp3",
"video/mpeg"=>".mpeg",
"video/3gpp"=>".3gp",
"video/x-ms-asf"=>".asf",
"video/x-msvideo"=>".avi"
);
$this->mencodeType = array(
"application/vnd.rn-realmedia"=>".rm",
"audio/x-pn-realaudio"=>".rmvb",
"audio/x-ms-wmv"=>".wmv",
);
} //检查文件类型

function checkType() {
if(function_exists(mime_content_type)){
return false;
}else{
//$contentType = mime_content_type($this->fromFile);
$exe = "D:serverphpextrasmagic";
$handel = new finfo(FILEINFO_MIME, $exe);
$contentType =  $handel->file($this->fromFile);
}
foreach($this->mpegType as $index=>$key){
if($contentType == $index){
$name = md5(date("Ymd").tiime());
$this->toFileName = $name;
$this->$mpegComm = true;
return true;
}
}
foreach($this->mencodeType as $index=>$key){
if($contentType == $index){
$name = md5(date("Ymd").time());
$this->toFileName = $name;
$this->mencodeComm = true;
return true;
}else{
return false;
}
}
}

//设置文件,图片大小">图片大小
function setSize($flvSize,$picSize) {
$flvWidth = $flvSize[0];
$flvHeight = $flvSize[1];
$picWidth = $picSize[0];
$picHeight = $picSize[1];
$picName = $this->toPicPath.$this->toFileName.".jpg";
$flvName = $this->toFilePath.$this->toFileName.".flv";
$toMdi = ROOT_DIR."/".$flvName;
$size = $picWidth."x".$picHeight;
if($this->mpegComm){
$this->cmdToFile= "$this->mpeg -i $this->fromFile -y -ab 56 -ar 22050 -b 500 -r 15 -s $flvWith*$flvHeight $flvName";
}
elseif($this->mencodeComm){
$this->cmdToFile = "$this->mencode $this->fromFile  -vf scale=$flvWidth:$flvHeight -ffourcc FLV1 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=70:acodec=mp3:abitrate=56:dia=-1 -ofps 25 -srate 22050 -oac mp3lame -o $flvName";
}
$this->cmdToPic = "$this->mpeg -i $toMdi -y -f image2 -ss 8 -t 0.003 -s $size $picName";
$this->cmdMidi = "$this->midi $toMdi /k";
echo $this->cmdToPic;
}

//开始转换
function toEcode() {
set_time_limit(0);
exec($this->cmdToFile,$flvStatus)
exec($this->cmdToPic,$picStatus);
exec($this->cmdMidi,$mStatus);
}

}

[!--infotagslink--]

相关文章

  • php5.3下使用php管理crontab计划任务

    php5.3或以上版本可以使用php管理crontab计划任务,下面我先来体验一下,有需要学习了解的朋友可进入参考。 1.使用php-crontab-manager管理计划任务 要求 PHP>=5.3...2016-11-25
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25