php中PathInfo的用法举例(图文)

发布时间:2020-06-16编辑:脚本学堂
本文介绍下,php中的全局变量pathinfo的具体用法,通过几个实例来帮助大家理解。有需要的朋友不妨作个参考。

本节跟大家分享下php中全局变量$_SERVER['PATH_INFO']及pathinfo()函数的用法,就我所了解的当前流行的cms系统,比如dedecms与帝国cms均多有用到这二个,来定义或获取全局信息。

来看个例子,有如下的网址:
http://www.jb200.com/index.php/index/do.html?c=index&m=search
则,

$_SERVER['PATH_INFO'] = ‘/index/do.html’
$_SERVER['QUERY_STRING'] = '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为空,英文在字首后面是中文的则能获取到。

如下图所示:
pathinfo中文乱码

可以用如下的函数取代它,代码如下:

<?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;
}  
?>

用这个函数去处理中文文件路径或文件时,就不会有问题了。

如下图所示:

pathinfo中文文件名