这里是文章模块栏目内容页
PHP平台兼容之basename函数在windows和linux上的区别问题

basename() 用于获取一个路径的最后一个文件名;

如果路径时 是一个 文件夹路径,

例如在linux环境,, 

basename('/www/web/data/admin/文件夹一/文件夹2')  返回 '文件夹2';

如果在window环境: 

basename('/www/web/data/admin/文件夹一/文件夹2') 返回的是 '文件夹一/文件夹2';

这就是区别,windows环境下,basename 是有bug存在的。

所以php程序要兼容 windows环境和linux环境,需要改写 basename函数的功能;

查询资料后,可以用 正则表达式的方式 取代basename的功能,让其在不同平台上获得一致的返回值、

function basenameSplit($path){   

    $matches = [];    if (preg_match('/^(?:(?:(.*)(?:\/+))?([^\/]+))(?:\/?)$/u', trim($path), $matches)) {        return [$matches[1], $matches[2]];
    }    return [null,null];
 
}

使用的时候:  list(, $fileName) = basenameSplit($path);

这个效果等同于 $fileName = basename($path);