gpt4 book ai didi

Windows 案例问题上的 PHP realpath

转载 作者:可可西里 更新时间:2023-11-01 10:38:48 25 4
gpt4 key购买 nike

我的 Windows 服务器上有一个符号链接(symbolic link),它是这样制作的:

F:\>mkdir link-target
F:\>mklink /D link f:\link-target

(注意符号链接(symbolic link)目标中的小写 f:)

在 PHP 中我运行这个:

$dir = realpath('f:\link');
var_dump($dir);

$dir = realpath($dir);
var_dump($dir);

哪些输出:

string 'f:\link-target' (length=14)
string 'F:\link-target' (length=14)

注意第二个真实路径上大小写的变化。

这是一个错误,还是有意为之?最好的解决方法是什么?

破案是这样的:

function check_link($to, $from) {
if (realpath($to) !== realpath($from)) {
...
}
}

用于检查$to是否存在,并链接到$from

  • PHP 5.4
  • Windows 7

编辑:

我需要在 Windows 和 Linux 上保持一致的行为,并且有以下解决方法非常讨厌:

if (realpath($from) === false) {
} elseif (realpath($to) === false) {
} else {
do {
$to = realpath($to);
} while (realpath($to) !== false && $to !== realpath($to));
do {
$from = realpath($from);
} while (realpath($from) !== false && $from !== realpath($from));
if ($to !== $from) {
...
}
}

编辑 2:

在进一步调查中,我注意到在 Windows 上符号链接(symbolic link)仅遵循 1 级深度:

// F:\>mkdir link-target
// F:\>mklink /D link f:\link-target
// F:\>mklink /D link2 f:\link

$dir = realpath('f:\link2');
var_dump($dir);

$dir = realpath($dir);
var_dump($dir);

$dir = realpath($dir);
var_dump($dir);

// string 'f:\link' (length=7)
// string 'f:\link-target' (length=14)
// string 'F:\link-target' (length=14)

最佳答案

结果

do {
$to = realpath($to);
} while (realpath($to) !== false && $to !== realpath($to));

是唯一的方法。

https://bugs.php.net/bug.php?id=61933

关于Windows 案例问题上的 PHP realpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418590/

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