gpt4 book ai didi

php - 如何在 PHP 中获取不存在文件的规范化路径(真实路径)?

转载 作者:可可西里 更新时间:2023-10-31 23:48:03 24 4
gpt4 key购买 nike

script.php

$filename = realpath(sprintf("%s/%s", getcwd(), $argv[1]));
var_dump($filename);

让我们尝试一些东西

[/foo/bar/bof] $ php script.php ../foo.txt
string(16) "/foo/bar/foo.txt"

[/foo/bar/bof] $ php script.php ../nonexistent.txt
bool(false)

该死! realpath 返回 false,因为该文件不存在。

对于 ../nonexistent.txt,我希望看到的是

string(24) "/foo/bar/nonexistent.txt"

如何获取 PHP 中任何相对路径的规范化路径?

注意:我看到了一些关于解析符号链接(symbolic link)路径的问题。这些问题的答案不适用于我的问题。

最佳答案

这是我能想到的最好的

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

它要求路径中的所有目录都存在。路径的 basename 是唯一可以不存在的部分。

如果目录名不存在,将抛出错误。

关于php - 如何在 PHP 中获取不存在文件的规范化路径(真实路径)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23588972/

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