本节跟大家分享下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; } ?>
用这个函数去处理中文文件路径或文件时,就不会有问题了。
如下图所示: