当前位置:  编程技术>php
本页文章导读:
    ▪解析PHP的session过期设置       网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime。如果想了解更多session回收机制,继续阅读。(本文环境php5.2)概述:每一次php请求,会有1/100的概率(默认值)触发“session.........
    ▪php selectradio和checkbox默认选择的实现方法详解       这是扩展yibing的select默认选择的实现方法 代码如下:<select name="wuyeleixing" size="1"> <option <?php if($myrow[wuyeleixing]==1) echo("selected");?> value="1">住宅</option> <option <?php if($myrow[wuy.........
    ▪php小经验:解析preg_match与preg_match_all 函数       正则表达式在 PHP 中的应用在 PHP 应用中,正则表达式主要用于:•正则匹配:根据正则表达式匹配相应的内容•正则替换:根据正则表达式匹配内容并替换•正则分割:根据正则表达式分割.........

[1]解析PHP的session过期设置
    来源: 互联网  发布时间: 2013-11-30

网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime。如果想了解更多session回收机制,继续阅读。(本文环境php5.2)

概述:每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效。

1. session在server端(一般是Apache with PHP module)如何存在的?
默认的,php会将session保存在/tmp目录下,文件名为这个样子:sess_01aab840166fd1dc253e3b4a3f0b8381。每一个文件对应了一个session(会话)。
more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:”jiangfeng”;admin|s:1:”0″;
#变量名|类型:长度:值
删除这里的session文件,就表示对应的session失效了。

2. session在client端(一般是浏览器)如何存在的?
session在浏览器端,只需要保存session ID(由server端生成的唯一ID)就可以了。有两种保存方式:在cookie中、在url里面。如果cookie中保存session ID,就可以看到浏览器的cookie中有一个PHPSESID变量。如果是URL传递的,就可以看到形如:
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。(在server端通过session.use_cookies来控制使用哪一种方式)

3. 在server端,php如何判断session文件是否过期?
如果”最后的修改时间”到”现在”超过了gc_maxlifetime(默认是1440)秒,这个session文件就被认为是过期了,在下一次session回收的时候,如果这个文件仍然没有被更改过,这个session文件就会被删除(session就过期了)。
简单的说,如果我登录到某网站,如果在1440秒(默认值)内没有操作过,那么对应的session就认为是过期了。
所以,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)
session.gc_maxlifetime = 86400
然后,重启你的web服务(一般是apache)就可以了。
注意:php5里面session过期使用了回收机制。这里设置时间为86400秒,如果session在86400秒内没有被修改过,那么在下一次“回收”时才真的被删除。

3. session“回收”何时发生?
默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的
#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。
注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd /path/to/sessions; find -cmin +24 | xargs rm

4. 一些特殊情况
因为回收机制会检查文件的“最后修改时间”,所以如果某个会话是活跃的,但是session的内容没有改变过,那么对应的session文件也就没有改变过,回收机制会认为这是一个长时间没有活跃的session而将其删除。这是我们不愿看到的,可以通过增加如下的简单代码解决这个问题:
<?php if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60) $_SESSION['last_access'] = time(); ?>
代码会每隔60秒,尝试修改修改一次session。
总结:如果想修改session过期时间,修改变量gc_maxlifetime就可以了。php5的session采用被动的回收机制(garbage collection)。过期的session文件不会自己消失,而是通过触发“回收”来处理过期的session。


    
[2]php selectradio和checkbox默认选择的实现方法详解
    来源: 互联网  发布时间: 2013-11-30
这是扩展yibing的select默认选择的实现方法
代码如下:

<select name="wuyeleixing" size="1">
<option <?php if($myrow[wuyeleixing]==1) echo("selected");?> value="1">住宅</option>
<option <?php if($myrow[wuyeleixing]==2) echo("selected");?> value="2">办公室</option>
<option <?php if($myrow[wuyeleixing]==3) echo("selected");?> value="3">营业房</option>
<option <?php if($myrow[wuyeleixing]==4) echo("selected");?> value="4">厂房</option>
<option <?php if($myrow[wuyeleixing]==5) echo("selected");?> value="5">仓库</option>
<option <?php if($myrow[wuyeleixing]==6) echo("selected");?> value="6">地块</option>
<option <?php if($myrow[wuyeleixing]==7) echo("selected");?> value="7">综合楼</option>
<option <?php if($myrow[wuyeleixing]==8) echo("selected");?> value="8">农牧场</option>
<option <?php if($myrow[wuyeleixing]==9) echo("selected");?> value="9">商住楼</option>
<option <?php if($myrow[wuyeleixing]==10) echo("selected");?> value="10">宾馆酒楼</option>
<option <?php if($myrow[wuyeleixing]==11) echo("selected");?> value="11">校舍</option>
</select>

radio单选框的默认选择实现
代码如下:

<input type="radio" name="dishu" value="3" <?php if($myrow[dishu]==3) echo("checked");?>>空白
<input type="radio" name="dishu" value="1" <?php if($myrow[dishu]==1) echo("checked");?>>出让
<input type="radio" name="dishu" value="2" <?php if($myrow[dishu]==2) echo("checked");?>>划拨
<input type="radio" name="dishu" value="4" <?php if($myrow[dishu]==4) echo("checked");?>>集体

checkbox 复选框的默认选择实现
代码如下:

<input name="fujia_jiaju" type="checkbox" value="jiaju" <?php if($myrow[fujia_jiaju]) echo("checked");?>></font></strong>家 具</td>
<td width="108" height="1"><strong><font color="#008080" face="楷体_GB2312"><input
name="fujia_chuju" type="checkbox" value="chuju" <?php if($myrow[fujia_chuju]) echo("checked");?>></font></strong>厨 具</td>
<td width="96" height="1"><strong><font color="#008080" face="楷体_GB2312"><input
name="fujia_woju" type="checkbox" value="woju" <?php if($myrow[fujia_woju]) echo("checked");?>></font></strong>卧 具</td>
<td width="99" height="1"><strong><font color="#008080" face="楷体_GB2312"><input
name="fujia_TV" type="checkbox" value="TV" <?php if($myrow[fujia_TV]) echo("checked");?>></font></strong>电视机


    
[3]php小经验:解析preg_match与preg_match_all 函数
    来源: 互联网  发布时间: 2013-11-30
正则表达式在 PHP 中的应用
在 PHP 应用中,正则表达式主要用于:
•正则匹配:根据正则表达式匹配相应的内容
•正则替换:根据正则表达式匹配内容并替换
•正则分割:根据正则表达式分割字符串
在 PHP 中有两类正则表达式函数,一类是 Perl 兼容正则表达式函数,一类是 POSIX 扩展正则表达式函数。二者差别不大,而且推荐使用Perl 兼容正则表达式函数,因此下文都是以 Perl 兼容正则表达式函数为例子说明。
定界符
Perl 兼容模式的正则表达式函数,其正则表达式需要写在定界符中。任何不是字母、数字或反斜线()的字符都可以作为定界符,通常我们使用 / 作为定界符。具体使用见下面的例子。
提示
尽管正则表达式功能非常强大,但如果用普通字符串处理函数能完成的,就尽量不要用正则表达式函数,因为正则表达式效率会低得多。关于普通字符串处理函数。
preg_match()
preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
语法:
int preg_match( string pattern, string subject [, array matches ] )
参数说明:
参数 说明 pattern 正则表达式 subject 需要匹配检索的对象 matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推例子 1 :
代码如下:

<?php
if(preg_match("/php/i", "PHP is the web scripting language of choice.", $matches)){
    print "A match was found:". $matches[0];
} else {
    print "A match was not found.";
}
?>

浏览器输出:
代码如下:

A match was found: PHP

在该例子中,由于使用了 i 修正符,因此会不区分大小写去文本中匹配 php 。
提示
preg_match() 第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜索到subject结尾处,则需使用 preg_match_all() 函数。
例子 2 ,从一个 URL 中取得主机域名 :
代码如下:

<?php
// 从 URL 中取得主机名
preg_match("/^(http://)?([^/]+)/i","http://www./index.html", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
?>

浏览器输出:
代码如下:

域名为:

preg_match_all()
preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。
语法:
int preg_match_all( string pattern, string subject, array matches [, int flags ] )
参数说明:
参数 说明 pattern 正则表达式 subject 需要匹配检索的对象 matches 存储匹配结果的数组 flags

可选,指定匹配结果放入 matches 中的顺序,可供选择的标记有:

  • PREG_PATTERN_ORDER:默认,对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推
  • PREG_SET_ORDER:对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推
  • PREG_OFFSET_CAPTURE:如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量
  • 下面的例子演示了将文本中所有 <pre></pre> 标签内的关键字(php)显示为红色。
    代码如下:

    <?php
    $str = "<pre>学习php是一件快乐的事。</pre><pre>所有的phper需要共同努力!</pre>";
    $kw = "php";
    preg_match_all('/<pre>([sS]*?)</pre>/',$str,$mat);
    for($i=0;$i<count($mat[0]);$i++){
        $mat[0][$i] = $mat[1][$i];
        $mat[0][$i] = str_replace($kw, '<span >'.$kw.'</span>', $mat[0][$i]);
        $str = str_replace($mat[1][$i], $mat[0][$i], $str);
    }
    echo $str;
    ?>

    正则匹配中文汉字
    正则匹配中文汉字根据页面编码不同而略有区别:
    •GBK/GB2312编码:[x80-xff>]+ 或 [xa1-xff]+
    •UTF-8编码:[x{4e00}-x{9fa5}]+/u
    例子:
    代码如下:

    <?php
    $str = "学习php是一件快乐的事。";
    preg_match_all("/[x80-xff]+/", $str, $match);
    //UTF-8 使用:
    //preg_match_all("/[x{4e00}-x{9fa5}]+/u", $str, $match);
    print_r($match);
    ?>

    输出:
    代码如下:

    Array
    (
        [0] => Array
            (
                [0] => 学习
                [1] => 是一件快乐的事。
            )

    )

        
    最新技术文章:
    ▪PHP函数microtime()时间戳的定义与用法
    ▪PHP单一入口之apache配置内容
    ▪PHP数组排序方法总结(收藏)
    ▪php数组排序方法大全(脚本学堂整理奉献)
    ▪php数组排序的几个函数(附实例)
    ▪php二维数组排序(实例)
    ▪php根据键值对二维数组排序的小例子
    ▪php验证码(附截图)
    ▪php数组长度的获取方法(三个实例)
    ▪php获取数组长度的方法举例
    ▪判断php数组维度(php数组长度)的方法
    ▪php获取图片的exif信息的示例代码
    ▪PHP 数组key长度对性能的影响实例分析
    ▪php函数指定默认值的方法示例
    ▪php提交表单到当前页面、提交表单后页面重定...
    ▪php四舍五入的三种实现方法
    ▪php获得数组长度(元素个数)的方法
    ▪php日期函数的简单示例代码
    ▪php数学函数的简单示例代码
    ▪php字符串函数的简单示例代码
    ▪php文件下载代码(多浏览器兼容、支持中文文...
    ▪php实现文件下载、支持中文文件名的示例代码...
    ▪php文件下载(防止中文文件名乱码)的示例代码
    ▪解决PHP文件下载时中文文件名乱码的问题
    ▪php数组去重(一维、二维数组去重)的简单示例
    ▪php小数点后取两位的三种实现方法
    ▪php Redis 队列服务的简单示例
    ▪PHP导出excel时数字变为科学计数的解决方法
    ▪PHP数组根据值获取Key的简单示例
    ▪php数组去重的函数代码示例
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3