多数大学生出来选择的工作和专业无关
首页 > 专业知识

纯php代码实现伪静态的方法

时间:2017-03-10 16:11:06 [来源]:郑州PHP培训学校

  纯php代码实现伪静态的方法
  我们知道,配置伪静态,我们可以使用.htaccess这个文件来配置,当然要打开相应扩展,但是,有的时候我们是不能进行这些配置的,或者有的时候这样的配置并不方便,而且非常的不灵活,今天就总结一个用纯php代码来实现伪静态的方式。因为我近期想自己封装一个框架,参考了thinkphp等的伪静态实现方式,我们之前用的这个的框架其实非常好用,不过就是没有伪静态,于是我就打算加上这个伪静态功能。
  要学习伪静态,首先我们要懂得url的访问规则,这样是比较规范的路径,那么他会先试图访问login这个目录,因为从表面上看,他应该是个目录形式,如果可以找到login这个目录,那么他就会再从里面找index这个目录,如果能找到,就访问里面的index.html或者index.htm或者index.php等,如果没有这样的文件,就会显示404,而如果我们在login下面配置了伪静态(要知道,伪静态是相对目录层级而言的,每个配置都是针对某个目录下起作用的),那么首先他还是按照上面说的方式找,而不同的是,如果他没有找到这个index目录,那么伪静态就会起作用,将这个index变为伪静态配置中所配置的参数。也就是说,伪静态的优先级是低于目录结构本身的,所以,我们配置伪静态的时候一定要考虑到目录名称,尽量要将伪静态的规则和目录名进行区别开,防止受目录本身结构的影响。下面就说一下我的这个php代码实现伪静态的方法,我们在网站根目录进行配置,并且以我的框架为例来说。
  首先,这个框架和其他框架一样,所用的url访问,都是访问的一个类库中的某个方法,都是通过实例化某个类库的方法实现的,所以我们定义了一个m和一个a参数,来分别接收类名和方法名。然后通过new进行实例化,而我们要做伪静态当然我们要定义一下规则,我定义的规则就是,将路径中第一个参数付给$_GET['m'],将第二个参数付给$_GET['a'],然后后面的参数成对出现的付给$_GET的key和value,这样来达到虚拟接收get传值的方式,很多人对get传值可能并不理解,因为程序本身可以自动将?后接收的类似m=login值就会默认的付给$_GET,变成$_GET['m']=login这样,其实我们完全可以通过一些函数,获取一下url信息,进制自己组合$_GET;这个函数就是$_SERVER来看一下我的代码实现
  define(‘URLROLE’, 1);定义url规则,1为伪静态,即http://local.xx.com/login/index这样;这里是可以省略index.php的
  php纯代码实现伪静态PHP
  if(1==URLROLE){
  $nav=$_SERVER["REQUEST_URI"];
  $script_name=$_SERVER["SCRIPT_NAME"];
  $nav1=ereg_replace(".html","",substr(ereg_replace("$script_name","",urldecode($nav)),1));
  $vars = @explode("/",$nav1);
  $_url = array_chunk($vars,2);
  $_GET['m'] = $vars[0]?$vars[0]:'index';//如果没有参数,默认访问index类库的index方法
  $_GET['a'] = $vars[1]?$vars[1]:'index';
  unset($_url[0]);
  if($_url){
  foreach($_url as $key=>$val){
  @$_GET[$val[0]] = $val[1];
  }
  }
  //var_dump($_GET);
  if(1==URLROLE){
  $nav=$_SERVER["REQUEST_URI"];
  $script_name=$_SERVER["SCRIPT_NAME"];
  $nav1=ereg_replace(".html","",substr(ereg_replace("$script_name","",urldecode($nav)),1));
  $vars = @explode("/",$nav1);
  $_url = array_chunk($vars,2);
  $_GET['m'] = $vars[0]?$vars[0]:'index';//如果没有参数,默认访问index类库的index方法
  $_GET['a'] = $vars[1]?$vars[1]:'index';
  unset($_url[0]);
  if($_url){
  foreach($_url as $key=>$val){
  @$_GET[$val[0]] = $val[1];
  }
  }
  //var_dump($_GET);
  }

上一篇:关于PHP语言的十大误解

下一篇:PHP需要注意的网站安全性问题