我這是犯了這樣的我的Windows服務器上的符號鏈接:PHP的realpath
F:\>mkdir link-target
F:\>mklink /D link f:\link-target
(請注意,在鏈接目標小寫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)
注意第二個實時路徑上的情況發生了變化。
這是一個錯誤,或打算?最好的解決方法是什麼?
它打破的情況下,這樣的:這是用來檢查$to
存在,
function check_link($to, $from) {
if (realpath($to) !== realpath($from)) {
...
}
}
鏈接到$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:
在furter調查中,我已經注意到了,在Windows上符號鏈接只能跟着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)
這應該更快:'while($ to = realpath($ from)和$ to!== $ from){$ from = $ to; }' – user