Tha*_*you 6 php path realpath canonicalization
脚本文件
$filename = realpath(sprintf("%s/%s", getcwd(), $argv[1]));
var_dump($filename);
Run Code Online (Sandbox Code Playgroud)
让我们尝试一些事情
[/foo/bar/bof] $ php script.php ../foo.txt
string(16) "/foo/bar/foo.txt"
[/foo/bar/bof] $ php script.php ../nonexistent.txt
bool(false)
Run Code Online (Sandbox Code Playgroud)
该死!realpath返回 false 因为文件不存在。
我想看到的../nonexistent.txt是
string(24) "/foo/bar/nonexistent.txt"
Run Code Online (Sandbox Code Playgroud)
如何获取 PHP 中任何相对路径的规范化路径?
注意:我看到了一些有关解析符号链接路径的问题。这些问题的答案不适用于我的问题。
这是我能想到的最好的
function canonicalize_path($path, $cwd=null) {
// don't prefix absolute paths
if (substr($path, 0, 1) === "/") {
$filename = $path;
}
// prefix relative path with $root
else {
$root = is_null($cwd) ? getcwd() : $cwd;
$filename = sprintf("%s/%s", $root, $path);
}
// get realpath of dirname
$dirname = dirname($filename);
$canonical = realpath($dirname);
// trigger error if $dirname is nonexistent
if ($canonical === false) {
trigger_error(sprintf("Directory `%s' does not exist", $dirname), E_USER_ERROR);
}
// prevent double slash "//" below
if ($canonical === "/") $canonical = null;
// return canonicalized path
return sprintf("%s/%s", $canonical, basename($filename));
}
Run Code Online (Sandbox Code Playgroud)
它要求路径中的所有目录都存在。路径basename的 是唯一可能不存在的部分。
如果目录名不存在,将会抛出错误。
| 归档时间: |
|
| 查看次数: |
3457 次 |
| 最近记录: |