Php中Ignore_user_abort函数的用法

 更新时间:2016年11月25日 16:45  点击:2019
Ignore_user_abort有一个功能就是定时任务功能关了页面程序还会执行了,下面我们来看Php中Ignore_user_abort函数的用法吧。


PHP中的ignore_user_abort函数是当用户关掉终端后脚本不停止仍然在执行,可以用它来实现计划任务与持续进程,下面会通过实例讨论ignore_user_abort()函数的作用与用法。

ignore_user_abort() 可以实现当客户端关闭后仍然可以执行PHP代码,可保持PHP进程一直在执行,可实现所谓的计划任务功能与持续进程,只需要开启执行脚本,除非 apache等服务器重启或有脚本有输出,该PHP脚本将一直处于执行的状态,初看很实用,不过代价是一个PHP执行脚本的持续进程,开销很大,但却可以实现很多意想不到的功 能。

其描述为设置与客户机断开是否会终止脚本的执行。

一,函数原型

int ignore_user_abort ( [bool setting] )

二,版本兼容

PHP 3 >= 3.0.7, PHP 4, PHP 5

三,函数基础用法与实例

1,函数基础用法

说明:调用ignore_user_abort()函数声明即使客户机断开不终止脚本的执行。

2,结合set_time_limit()函数实现一个循环脚本执行任务

 <?php 
 
 ignore_user_abort(); 
 
 set_time_limit(0); 
 
 $interval=60*15; 
 
 do{ 
 
 //执行的业务 
 
}while(true); 
 
?> 
说明:每隔15分钟循环执行

3,自定义实现文件输出并跟踪ignore_user_abort()函数的执行结果

<?php 
 
gnore_user_abort ( TRUE ); 
 
set_time_limit ( 0 ); 
 
$interval = 10; 
 
$stop = 1; 
 
do { 
 
if( $stop == 10 ) break; 
 
file_put_contents('viphper.php',' Current Time: '.time()。' Stop: '.$stop); 
 
$stop++; 
 
sleep ( $interval ); 
 
} while ( true ); 
 
?> 
打开viphper.php文件,文件内容如下:

Current Time: 1273735029 Stop: 9

其原理是即使客户端终止脚本,仍然每隔10秒钟执行一次,并打印出当前时间与终止点,这样就可以测试出ignore_user_abort()函数的具体效果。

通过实例发现ignore_user_abort()函数非常实用,实现计划任务,完成后续任务,持续进程等非常有效。

字符串截取函数在php中有substr但只能处理好英文或uft8了,如果有中英文必须进行判断处理,下面来看一篇php 字符串截取函数用法详解文章。

substr()是php自带的一个截取字符串的函数,只能处理英文,数字,却不能截取中文混排的,所以如果需要截取中文混排的字符串,可以参考第二个代码。

 代码如下复制代码

//构造字符串
  $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  echo "原字符串:".$str."
";
  //按各种方式进行截取
  $str1 = substr($str,5);
  echo "从第5个字符开始取至最后:".$str1."
";
  $str2 = substr($str,9,4);
  echo "从第9个字符开始取4个字符:".$str2."
";
  $str3 = substr($str,-5);
  echo "取倒数5个字符:".$str3."
";
  $str4 = substr($str,-8,4);
  echo "从倒数第8个字符开始向后取4个字符:".$str4."
";
  $str5 = substr($str,-8,-2);
  echo "从倒数第8个字符开始取到倒数第2个字符为止:".$str5."
";
运行代码复制代码另存代码


 

/*
------------------------------------------------------
参数:
$str_cut    需要截断的字符串
$length     允许字符串显示的最大长度

程序功能:截取全角和半角(汉字和英文)混合的字符串以避免乱码
------------------------------------------------------
*/

 代码如下复制代码
function substr_cut($str_cut,$length)
{
    if (strlen($str_cut) > $length)
    {
        for($i=0; $i < $length; $i++)
        if (ord($str_cut[$i]) > 128)    $i++;
        $str_cut = substr($str_cut,0,$i)."..";
    }
    return $str_cut;
}
strtr()和str_repalce()小编只认识后面一个函数是替换前面函数不知道好像查找字符串的位置了,下面我们具体的来了解一下php替换字符串函数strtr()和str_repalce()有什么区别吧。

php中替换函数主要有strtr(),str_repalce()这两个函数,今天介绍下他们的区别和用法, 先来看看这个php字符串替换函数 strtr()的两种用法:

strtr(string,from,to) 或者strtr(string,array) 首先针对strtr函数第一种方式:

我们看看下面的举例:


<?php
echo strtr("I Love you","Lo","lO");
?>


得到的结果是: I lOve yOu

这个结果提醒我们:
1.strtr它是区分大小写的
2.strtr的替换是很特殊的,你注意看后面那个yOu,中间的O被替换的,这显然不是我们的本意。

再举一个特殊例子,说明这个php的sttr函数的怪异

<?php
echo strtr("I Love you","Love","");
?>


结果是: I Love you

什么也不会改变,所以strtr需要注意的是:

3.不能被替换为空,也就是末位那个参数不能是空字符串,当然空格是可以的。

再次举例strtr函数的另一种情况:

<?php
echo strtr("I Loves you","Love","lOvEA");
?>


结果是: I lOvEs yOu

注意看第三个参数的A,在结果中并没有出现。
4.我不建议用strtr以少换多。
ok,既然这个strtr函数挺麻烦为什么还要用呢?
原因是,它的速度很快。据说,strtr 比 str_replace 快四倍。
5.能用strtr函数的时候一定要用。
那怎么用才舒服?
这就是它的第二种情况:
strtr(string,array)
6.strtr符合意愿的使用方法

<?php
$table_change = array('you'=>'her sister');
echo strtr("I Love you",$table_change);
?>

结果为: I Love her sister

7.小技巧:你想到替换什么你就往数组加什么
比如:

<?php
$table_change = array('you'=>'her sister');
$table_change += array('Love' => 'hate');
echo strtr("I Love you",$table_change);
?>

结果是: I hate her sister

再次提醒那个Love 写成love 是行不通的哦。

字符串取代。
语法: string str_replace(string needle, string str, string haystack);
返回值: 字符串
函数种类: 资料处理

内容说明:
本函数将字符串 str 代入 haystack 字符串中,将所有的 needle 置换成 str。
下例将 %body% 以 black 取代


<?php
$bodytag = str_replace("%body%", "black", "<body text=%body%>");
echo $bodytag;
?>


格式:
[@str_replace("要替换的旧内容", "要取代原内容的新字符", $被替换内容的变量名)]
[@str_replace(array('旧1','旧2','旧3'), array('新1','新2','新3'), $被替换内容的变量名)]
[@str_replace(array('旧1','旧2','旧3'), '新内容', $被替换内容的变量名)]

实例:

多对一替换:想把内容字段里所有的<p></p>标签清除掉,替换成空 [@str_replace(array('<p>','</p>'), '', $Content)]

一对一替换:想把内容字段里所有的<br>标签换成<p> [@str_replace('<br>', '<p>', $Content)]

多对多替换:想把内容字段里的<br>换成<br />, 同时<p>换<hr>,把</p>全清除 [@str_replace(array('<br>', '<p>','</p>'), array('<br />','<hr>',''), $Content)]

strlen和mb_strlen函数在php中是计算字符串长度了不过strlen和mb_strlen函数对于字节长度是不一样了,具体有什么不一样我们就一起来看看吧。

在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别…
先看例子:


<?php
 
$str='中文a字1符';
 
echo strlen($str).'<br>';//14
 
echo mb_strlen($str,'utf8').'<br>';//6
 
echo mb_strlen($str,'gbk').'<br>';//8
 
echo mb_strlen($str,'gb2312').'<br>';//10
>

分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .

利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)


echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;

例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)

补充:

里面代码如下(代码编码为UTF-8):

<?php

$str1 = 'www.111cn.net';

$str2 = '烟雨网';

$str3 = '烟雨网111cn.net';

echo mb_strlen($str1).'<br>';//结果15

echo mb_strlen($str2).'<br>';//结果6

echo mb_strlen($str3).'<br>';//结果17

echo '--------1-------------<br>';

echo strlen($str1).'<br>';//结果15

echo strlen($str2).'<br>';//结果6

echo strlen($str3).'<br>';//结果17

echo '--------utf-8-------------<br>';

echo mb_strlen($str1,'utf-8').'<br>';//结果15

echo mb_strlen($str2,'utf-8').'<br>';//结果3

echo mb_strlen($str3,'utf-8').'<br>';//结果14

echo '--------gbk-------------<br>';

echo mb_strlen($str1,'gbk').'<br>';//结果15

echo mb_strlen($str2,'gbk').'<br>';//结果5

echo mb_strlen($str3,'gbk').'<br>';//结果15

echo '--------gb2312-------------<br>';

echo mb_strlen($str1,'gb2312').'<br>';//结果15

echo mb_strlen($str2,'gb2312').'<br>';//结果5

echo mb_strlen($str3,'gb2312').'<br>';//结果16

?>

至此现在只得出两点结论:

1. 当为英文字母时,strlen和mb_strlen可以通用,编码不同,两个函数结果都是一样。

2. 当为中文时候,编码会影响字符的长度,就算是中文对于GBK和GB2312都是不同的表现。

3. 代码编码为UTF-8,否则得出的结果现象会和我的有出入,当为其他编码时候,比如为ANSI时结果值会为另外的值,而且需要注意的是,mb_strlen并不是PHP核心函数,需要加载扩展,代码结果如下:

(代码编码为ANSI)

<?php

$str1 = 'www.111cn.net';

$str2 = '烟雨网';

$str3 = '烟雨网111cn.net';

echo mb_strlen($str1).'<br>';//结果15

echo mb_strlen($str2).'<br>';//结果6

echo mb_strlen($str3).'<br>';//结果17

echo '--------1-------------<br>';

echo strlen($str1).'<br>';//结果15

echo strlen($str2).'<br>';//结果6

echo strlen($str3).'<br>';//结果17

echo '--------utf-8-------------<br>';

echo mb_strlen($str1,'utf-8').'<br>';//结果15

echo mb_strlen($str2,'utf-8').'<br>';//结果3

echo mb_strlen($str3,'utf-8').'<br>';//结果14

echo '--------gbk-------------<br>';

echo mb_strlen($str1,'gbk').'<br>';//结果15

echo mb_strlen($str2,'gbk').'<br>';//结果3

echo mb_strlen($str3,'gbk').'<br>';//结果14

echo '--------gb2312-------------<br>';

echo mb_strlen($str1,'gb2312').'<br>';//结果15

echo mb_strlen($str2,'gb2312').'<br>';//结果3

echo mb_strlen($str3,'gb2312').'<br>';//结果14

?>

另外,对于各个编码对字符长度的影响规律还在测试中,我把我的测试结果发在这里,欢迎知道的朋友告诉我,谢谢!

[!--infotagslink--]

相关文章

  • 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
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • c# 数据类型占用的字节数介绍

    本篇文章主要是对c#中数据类型占用的字节数进行了详细的介绍。需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Nest.js参数校验和自定义返回数据格式详解

    这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Vue 组件复用多次自定义参数操作

    这篇文章主要介绍了Vue 组件复用多次自定义参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • C#中decimal保留2位有效小数的实现方法

    这篇文章主要介绍了C#中decimal保留2位有效小数的实现方法,针对decimal变量保留2位有效小数有多种方法,可以使用Math.Round方法以及ToString先转换为字符串等操作来实现。具体实现方法感兴趣的朋友跟随小编一起看看吧...2020-06-25
  • 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
  • js实现文本框输入文字个数限制代码

    这篇文章主要介绍了js实现文本框输入文字个数限制代码,文本框输入的文字个数并不是无限制的,一般都会限定一个输入最高上限,如何限制,请看本文...2015-12-27
  • C# 获取当前月份天数的三种方法总结

    本篇文章主要是对C#中获取目前月份的天数的三种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25