本节跟大家分享下php中全局变量$_SERVER['PATH_INFO']及pathinfo()函数的用法,就我所了解的当前流行的cms系统,比如dedecms与帝国cms均多有用到这二个,来定义或获取全局信息。
来看个例子,有如下的网址:
http://www.jb200.com/index.php/index/do.html?c=index&m=search
则,
这里给出一个解析PATH_INFO的代码:
<?php
/**
* pathinfo应用举例
* edit by www.jb200.com
*/
if( !isset( $_SERVER['PATH_INFO'] ) ){
$pathinfo = 'default';
}else{
$pathinfo = explode('/', $_SERVER['PATH_INFO']);
}
if( is_array($pathinfo) AND !empty($pathinfo) ){
$page = $pathinfo[1];
}else{
$page = 'a.php';
}
require "$page.php";
?>
下面再来看一个例子,这里介绍的不再是$_SERVER['PATH_INFO']全局变量了,而是我们今天的主角pathinfo函数。
pathinfo()函数
pathinfo()函数返回一个包含了文件信息的数组,数组中有四个元素,分别是dirname、basename、extension、filename。
例如,有如下的文件路径,可以用pathinfo进行分解:
<?php //pathinfo函数用法 $path = "/www/jbxue/images/logo.jpg"; $fileArr = pathinfo($path); print_r($fileArr); //输出结果:Array ( [dirname] => /www/jbxue/images [basename] => logo.jpg [extension] => jpg [filename] => logo ) //根据数组的键名就可以获得对应的键值 echo $fileArr['filename']; //输出结果:logo echo $fileArr['extension']; //输出结果:jpg ?>
最后,说说pathinfo()函数在处理中文时遇到的问题及解决方法。
问题描述:
pathinfo在处理中文文件名时,如果中文在字首就出现获取的filename为空,英文在字首后面是中文的则能获取到。
如下图所示:

可以用如下的函数取代它,代码如下:
<?php
//增强型的pathinfo函数
//edit by www.jb200.com
function path_info($filepath)
{
$path_parts = array();
$path_parts ['dirname'] = rtrim(substr($filepath, 0, strrpos($filepath, '/')),"/")."/";
$path_parts ['basename'] = ltrim(substr($filepath, strrpos($filepath, '/')),"/");
$path_parts ['extension'] = substr(strrchr($filepath, '.'), 1);
$path_parts ['filename'] = ltrim(substr($path_parts ['basename'], 0, strrpos($path_parts ['basename'], '.')),"/");
return $path_parts;
}
?>
用这个函数去处理中文文件路径或文件时,就不会有问题了。
如下图所示:
