gpt4 book ai didi

php - 替换 PHP 的 realpath()

转载 作者:可可西里 更新时间:2023-10-31 22:53:40 27 4
gpt4 key购买 nike

显然,realpath 有很多问题。在 PHP 5.3.1 中,它会导致随机崩溃。在 5.3.0 及更低版本中,realpath 随机失败并返回 false(当然是针对相同的字符串),而且它总是在 realpath 上失败 - 对相同的字符串进行两次/更多次(当然,它是第一次工作)。

此外,它在早期的 PHP 版本中有很多错误,以至于完全无法使用。好吧……它已经是了,因为它不一致。

无论如何,我有什么选择?也许自己重写?这可取吗?

最佳答案

感谢 Sven Arduwie 的代码 ( pointed out by Pekka ) 和一些修改,我构建了一个(希望)更好的实现:

/**
* This function is to replace PHP's extremely buggy realpath().
* @param string The original path, can be relative etc.
* @return string The resolved path, it might not exist.
*/
function truepath($path){
// whether $path is unix or not
$unipath=strlen($path)==0 || $path{0}!='/';
// attempts to detect if path is relative in which case, add cwd
if(strpos($path,':')===false && $unipath)
$path=getcwd().DIRECTORY_SEPARATOR.$path;
// resolve path parts (single dot, double dot and double delimiters)
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
$parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutes = array();
foreach ($parts as $part) {
if ('.' == $part) continue;
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
$path=implode(DIRECTORY_SEPARATOR, $absolutes);
// resolve any symlinks
if(file_exists($path) && linkinfo($path)>0)$path=readlink($path);
// put initial separator that could have been lost
$path=!$unipath ? '/'.$path : $path;
return $path;
}

注意: 与 PHP 的 realpath 不同,此函数不会在出错时返回 false;它返回一条尽可能解决这些怪癖的路径。

注2:显然有些人无法正确阅读。 Truepath() 不适用于网络资源,包括 UNC 和 URL。 它仅适用于本地文件系统。

关于php - 替换 PHP 的 realpath(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com