+ -
当前位置:首页 → 问答吧 → 菜鸟入门系列 - PATHINFO的使用

菜鸟入门系列 - PATHINFO的使用

时间:2009-04-21

来源:互联网

首先声明,大虾么就不用看了,我只是在编写自己的一些代码中的小小的收获拿来与大家分享而已。


PATHINFO的使用,相信大家如果用过thinkphp就会被它的URL结构所吸引。
不错,这就是PATHINFO所发挥的作用。
例如x.php?page=1可以变成x.php/page/1

对于SEO来说,PATHINFO可以消灭类似于?的东西,虽然google说这样做没有必要。
此外对于用户体验的提升也有帮助。

PATHINFO的使用要注意啥?
从SEO角度,就是要消灭重复的内容。比如,假设 x.php/1可以访问、x.php/1/也可以访问,这样就不利于搜索引擎的收录。

现在就开始编码。

首先写一个route.php,用于储存URL的配置信息
[php]
return array(
  'page'=>array(
   'page'=>'/^\/([0-9]+)\/[0-9]+$/',
   'catid'=>'/\/[0-9]+\/([0-9]+)$/',
  ),
);
[/php]
嘿,这样的风格也是从thinkphp学来的。
可能需要一点正则表达的基础,不过上面的正则表达写的不难,很容易理解。
数组的key最后对应$_GET的KEY
正则表达里的match的值最后成为$_GET里的$value

然后写一个处理函数,这里要注意$_SERVER['PATH_INFO']的运用
这个变量默认为pathinfo的内容,比如x.php/page/1的$_SERVER['PATH_INFO']就是/page/1

[php]

function routeProcess($name){
//如果存在PATHINFO
if (isset($_SERVER['PATH_INFO'])){
  //载入配置数组
  $routeConf = include 'route.php';
  //用于统计是否每一个正则是否都正确匹配
  $count=0;
  foreach ($routeConf[$name] as $key=>$value){
   $match = array();
   $count++;
   if(preg_match($value,$_SERVER['PATH_INFO'],$match)>0){
    $_GET[$key]=$match[1];
    $count--;
    continue;
   }
  }
  if($count!=0){
   return false;
  }
  else {
   return true;
  }
}
else {
  return false;
}
}

[/php]


最后我们来调用下这个函数,假设我们的脚本是index.php
访问地址是 index.php/11/2


var_dump(routeProcess('page'));
var_dump($_GET);


显示如下
boolean truearray  'page' => string '11' (length=2)  'catid' => string '2' (length=1) PS:在xdebug下看,routeProcess函数用了0.3ms 希望大家多多批评,不吝啬你们的板砖。(最近在写自己的小框架,这些代码全部来源于此)

作者: microwind   发布时间: 2009-04-21

好文章 讲的很清楚

作者: jiang2798   发布时间: 2009-08-29