当前位置:  java/j2ee iis7站长之家
本页文章导读:
    ▪学习php中时间戳和日期格式的转换      一,PHP时间戳函数获取指定日期的unix时间戳 strtotime(”2009-1-22″) 示例如下: echo strtotime(”2009-1-22″) 结果:1232553600 说明:返回2009年1月22日0点0分0秒时间戳 二,PHP时间戳函数获取英文文.........
    ▪php实现过滤IP黑白名单的方法      需求:对一个php文件执行进行IP过滤,不方便直接配置服务器,于是需要直接在php文件开头进行IP的过滤。 IP过滤规则,可以有如下形式: 1.完整的IP地址 如:192.168.0.1 2.某一段IP 如:192.168.0.........
    ▪php实现简单的伪静态URL的机制介绍      php实现简单的伪静态URL的机制介绍,有需要的朋友可以参考下。 php框架路由伪静态 曾几何时,我们公司准备开发一套新的建站系统,决定将以前的框架给KO掉,重新开发一套新的框架来适应.........

[1]学习php中时间戳和日期格式的转换
    来源: 互联网  发布时间: 2013-12-24

一,PHP时间戳函数获取指定日期的unix时间戳 strtotime(”2009-1-22″)

示例如下:
echo strtotime(”2009-1-22″) 结果:1232553600
说明:返回2009年1月22日0点0分0秒时间戳

二,PHP时间戳函数获取英文文本日期时间

示例如下:
便于比较,使用date将当时间戳与指定时间戳转换成系统时间

(1)打印明天此时的时间戳strtotime(”+1 day”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 day”)) 结果:2009-01-23 09:40:25

(2)打印昨天此时的时间戳strtotime(”-1 day”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 day”)) 结果:2009-01-21 09:40:25

(3)打印下个星期此时的时间戳strtotime(”+1 week”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 week”)) 结果:2009-01-29 09:40:25

(4)打印上个星期此时的时间戳strtotime(”-1 week”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 week”)) 结果:2009-01-15 09:40:25

(5)打印指定下星期几的时间戳strtotime(”next Thursday”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”next Thursday”)) 结果:2009-01-29 00:00:00

(6)打印指定上星期几的时间戳strtotime(”last Thursday”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”last Thursday”)) 结果:2009-01-15 00:00:00
以上PHP时间戳函数示例可知,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间。

示例:
 

代码如下:

<?php
 
/*-------------------------------------------------------
*
* Copyright (c) 2011 Baidu.com, Inc. All Rights Reserved
* $Id$
*
*-------------------------------------------------------*/
//时间戳转日期
$date_time_array = getdate(1297845628); //1311177600  1316865566
$hours = $date_time_array["hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array["seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
 
echo "year:$year\nmonth:$month\nday:$day\nhour:$hours\nminutes:$minutes\nseconds:$seconds\n";
 
//正常日期转时间戳
echo mktime(0, 0, 0, 9, 18, 2011) . "\n";
echo mktime(0, 0, 0, 9, 25, 2011) . "\n";
 
/*
time();
是获得当前时间,但获得的是一整型
*/
//可以对此进行格式化
echo "time()显示年月日时分秒:" . date("Y-m-d H:i:s", time()) . "\n";
//这样连时,分秒一起显示
echo "time()只显示年月日:" . date("Y-m-d ", time()) . "\n"; //只年示年月日
echo "时间戳格式化:" . date("Y-m-d H:i:s", 1297845628) . "\n"; //直接使用时间戳

//把正常日期转成时间戳了,这里如果有时分秒也是同理,
$year=((int)substr("2008-12-04",0,4));//取得年份
$month=((int)substr("2008-12-04",5,2));//取得月份
$day=((int)substr("2008-12-04",8,2));//取得几号
echo mktime(0,0,0,$month,$day,$year);

/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */
?>

注意:
1)、PHP时间大的来分有两种,一是时间戳类型(1228348800),二是正常日期格式(2008-12-4)

2)、php5.1以上时间戳会与实际时间相差8小时,解决办法如下:
1、最简单的方法就是不要用php5.1以上的版本--显然这是不可取的方法!!!
2、修改php.ini。打开php.ini查找date.timezone 去掉前面的分号= 后面加Asia/Shanghai,重启apache服务器即可--缺点就是如果程序放到别人的服务器上,不能修改php.ini,那就奈何不得了。
3、在程序中添加时间的初始化的语句的 即:“date_default_timezone_set("Asia/Shanghai"); ”这个可以由程序员任意设置,我的推荐。
时区标识符,大陆内地可用的值是:PRC,Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为中国,重庆,上海,乌鲁木齐) ,Etc/GMT-8,Asia/Harbin
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)
还有新加坡:Asia/Singapore
这样就可以实现输出的是北京时间了。


    
[2]php实现过滤IP黑白名单的方法
    来源: 互联网  发布时间: 2013-12-24

需求:对一个php文件执行进行IP过滤,不方便直接配置服务器,于是需要直接在php文件开头进行IP的过滤。

IP过滤规则,可以有如下形式:
1.完整的IP地址 如:192.168.0.1
2.某一段IP 如:192.168.0.* 。

运维人员可以自定义IP黑白名单,由多个IP过滤规则组成,保存在数组中。通过编写代码,实现IP黑白名单功能。
首先实现一个函数,功能是判断ip是否符合某个ip过滤规则:
 

代码如下:
function ip_test($ip,$iprule){ 
   $ipruleregexp=str_replace()('.*','ph',$iprule); 
   $ipruleregexp=preg_quote($ipruleregexp,'/'); 
   $ipruleregexp=str_replace('ph','\.[0-9]{1,3}',$ipruleregexp); 
     
   if(preg_match('/^'.$ipruleregexp.'$/',$ip)) return true; 
     else return false; 
}

实现了ip_test这个核心函数后,下面的过程就简单多了,无非就是简单的遍历名单中的每条规则,判断当前连接的IP是否符合规则,并进行对应的步骤。
白名单,当IP至少满足一条规则时继续执行操作:
 

代码如下:
$curr_ip=$_SERVER['REMOTE_ADDR']; 
$white_list=array(...); //白名单规则 
$test_success=false; 
foreach($white_list as $iprule){ 
   if(ip_test($curr_ip,$iprule)){ 
      $test_success=true; 
      break; 
    } 
 } 
 if(!$test_success) exit('IP not in white list'); 

黑名单,当IP不满足所有规则时继续执行操作:
 

代码如下:
$curr_ip=$_SERVER['REMOTE_ADDR']; 
  $black_list=array(...); //黑名单规则 
  foreach($black_list as $iprule){ 
     if(ip_test($curr_ip,$iprule)){ 
       exit('IP in black list'); 
      } 
 } 

至此,一个简单的PHP实现的IP黑白名单过滤就完成了,希望可以为大家带来帮助。
您可能感兴趣的文章:

PHP安全过滤代码(360提供 安全系数高)
PHP过滤post,get敏感数据的实例代码
php 过滤非法与特殊字符串的方法
php 防注入的一段代码(过滤参数)
很好用的php防止sql注入漏洞过滤函数的代码
php防止sql注入正则过滤一例
一段php过滤危险html的代码

 


    
[3]php实现简单的伪静态URL的机制介绍
    来源: 互联网  发布时间: 2013-12-24

php实现简单的伪静态URL的机制介绍,有需要的朋友可以参考下。

php框架路由伪静态

曾几何时,我们公司准备开发一套新的建站系统,决定将以前的框架给KO掉,重新开发一套新的框架来适应新的系统功能。领导们不希望使用外面已有的框架,号称要开发有自己特色的框架(不懂开发的领导害死人)。于是我们又投入到了新的开发当中。

由于我们的系统支持伪静态,以前的系统是直接使用服务器apache或IIS自带的rewrite文件定义规则,而框架中没有任何路由机制,于是这次框架准备使用新的策略,由PHP实现路由机制。于是我开始了功能实现的探索之路。

开发之前,我先了解‘路由机制’要做什么,它主要做两件事。
1.路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.wopop.com/article/1  其中:/article/1  -> ?_m=article&id=1。
2.其次,是将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。由于路由机制隔离了URL结构和参数的转换关系,使的日后结构的变化不会影响下面代码的执行。
通过上面的了解,可以得出要编写一个路由机制要一下几步:
1.编写服务器apache或IIS自带的rewrite文件,将URL结构导入index.php。
2.一个路由规则配置文件。
3.一个路由解析器,用来解析规则,匹配和转换URL。
于是,我们一一实现其中的每一个部分。

1.rewrite文件编写,以Apache为例:
 

代码如下:
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.+) index.php/$1 [L] 
</IfModule>

 

上面的代码就是将URL结构导入index.php中,具体的rewrite细节就不赘述了。

2.在PHP中设置一个路由规则配置文件routes.php,我简单的使用了一个hash数组编写规则:
 

代码如下:
    /**
     *路由配置文件编写说明:
     * 路由配置在一个array数组中,一条记录代表一个规则
     * 其中数组key的数据代表匹配的路径格式:使用特定的字符串标识  如:'/{id}'
     * 字符串中可以包含特定的变量,所有变量使用大括号{}包裹起来
     * 数组value里是一个array数组,是对key中路径中变量进行特定处理
     * 变量写在数组的key中,规范写在数组的value里,如:array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index')
     * 规范分成两类:
     * 1.格式判断:比如 '/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index') 为例,其中'id'=>'/\d+/'就是一个格式判断,
     * 表示id变量只能是数字,格式判断后面只能使用正则表达式,由于PHP没有正则类,所以我指定 '/XXX/'和'#XXX#'格式的字符串为正则表达式
     * 2.默认参数:比如 '/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index') 为例,其中'_m'=>'frontpage'就是一个默认参数,
     * 因为前面的路径没有_m和_a信息,所以后面会使用默认参数作为_m和_a的值
     * 
     * 所以对于规则'/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index')。我传入 /3  系统会转换成 index.php?_m=frontpage&_a=index&id=3
     * 
     * 规则匹配是按照$routes数组的顺序逐一匹配,一旦匹配上了就不往下匹配了。所以一些特定的匹配规则要放在前面,通用的放在后面。
     * 否则可能导致不执行特定的匹配规则了
     */ 
    $routes= array( 
        '/' => array('_m'=>'wp_frontpage','_a'=>'index'), 
        '/{id}'=> array('id'=>'/\d+/','_m'=>'wp_frontpage','_a'=>'index'), 
        '/{_m}/{_a}/{id}'=> array('id'=>'/\d+/'), 
        '/{_m}/{_a}'=> array() 
    ); 

3.路由机制中最复杂也是最重要的一部分,就是解析器。
   解析器有两个类组成(名字可能起的不佳)。
   一个是Route,作为整个解析器对外的接口,用于解析规则,匹配和转换URL,然而它只是一个代理,实际操作不是直接由它直接做的。
    一个是RoutePattern,每个RoutePattern实例对应规则数组中的一条记录,一个Route实例包含多个RoutePattern,而Route中的所有操作都会调用内部所有RoutePattern实例操作,并进行整合。
 

代码如下:
    class Route 
    { 
        private static $instance = null; 
        private $routepatterns=array(); 
         
        private function __construct() 
        { 
            $routes = array(); 
             include ROOT."/routes.php"; 
             foreach($routes as $key=>$value){ 
                 $this->routepatterns[]=new RoutePattern($key,$value); 
             } 
              
             if(!isset()($_SERVER['PATH_INFO'])) return false; 
             $urlpath= $_SERVER['PATH_INFO']; 
             $ismatch=$this->match_url(/blog_article/$urlpath/index.html); 
             $strip_urlpath=str_replace()('/','',$urlpath); 
             if(!$ismatch&&!emptyempty($strip_urlpath)){ 
                 Content::redirect(PAGE_404); 
             } 
        } 
         
        /**
         * 用路由规则匹配对应的url地址,匹配成功将对应url参数放入$_GET中
         * @param  string url地址
         * @return bool 是否匹配成功
         */ 
        public function match_url(/blog_article/$urlpath/index.html){ 
            foreach($this->routepatterns as $router){ 
                $urlargs=$router->match_url(/blog_article/$urlpath/index.html); 
                if($urlargs!==false){ 
                    $_GET=array_merge($urlargs,$_GET); 
                    return true; 
                } 
            } 
            return false; 
        } 
         
        public function rewrite_url(/blog_article/$urlparams/index.html){ 
            foreach($this->routepatterns as $router){ 
                $urlstr=$router->rewrite_url(/blog_article/$urlparams/index.html); 
                if($urlstr!==false){ 
                    return $urlstr; 
                } 
            } 
            $actualparams=array(); 
            foreach($urlparams as $arg=>$val){ 
                $actualparams[]=$arg."=".urlencode($val); 
            } 
            $actualparamstr=implode('&', $actualparams); 
            $rewriteurl="/index.php"; 
            if(!emptyempty($rewriteurl))$rewriteurl.="?{$actualparamstr}"; 
            return $rewriteurl; 
        } 
         
        public static function init() 
        { 
            if (null == self::$instance) { 
                self::$instance = new Route(); 
            } 
            return self::$instance; 
        } 
    } 
     
    class RoutePattern{ 
    //...... 
    } 

关于路由配置文件的解析,主要细节全在类RoutePattern中,关于RoutePattern中对规则的解析、URL匹配和转换URL细节,篇幅和精力有限,今天就不详细介绍了,下回再仔细分析。


    
最新技术文章:
▪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,