readlink
(PHP 4, PHP 5, PHP 7, PHP 8)
readlink — シンボリックリンク先を返す
パラメータ
path
-
シンボリックリンクのパス。
戻り値
シンボリックリンク・パスの内容を返します。エラーの場合は
false
を返します。
注意: この関数は、
path
がシンボリックリンクでない場合は失敗します。但し、Windows を除きます。 Windows では、正規化されたパスを返します。
例
例1 readlink() の例
<?php
// 出力例 /boot/vmlinux-2.4.20-xfs
echo readlink('/vmlinuz');
?>
+add a note
User Contributed Notes 3 notes
MarkAndrewSlade at gmail dot com ¶
15 years ago
This will trigger a warning and return false if you pass it a non-symlink. If the file doesn't exist, it will trigger a differently worded warning.
mslade@jupiter ~$ touch a
mslade@jupiter ~$ ln -s a b
mslade@jupiter ~$ ls -l {a,b}
-rw------- 1 mslade mslade 0 2009-06-10 15:27 a
lrwxrwxrwx 1 mslade mslade 1 2009-06-10 15:27 b -> a
mslade@jupiter ~$ php -r "var_dump(readlink('b'));"
string(1) "a"
mslade@jupiter ~$ php -r "var_dump(readlink('a'));"
Warning: readlink(): Invalid argument in Command line code on line 1
bool(false)
mslade@jupiter ~$ php -r "var_dump(readlink('c'));"
Warning: readlink(): No such file or directory in Command line code on line 1
bool(false)
casinero dot triste at OH_NO_SPAM dot gmail dot com ¶
7 years ago
A little function to readlink TO THE END:
(realpath can't do this if the symlink (ultimately) points to a non-existing path, since it just returns false in this case.)
function readlinkToEnd($linkFilename) {
if(!is_link($linkFilename)) return $linkFilename;
$final = $linkFilename;
while(true) {
$target = readlink($final);
if(substr($target, 0, 1)=='/') $final = $target;
else $final = dirname($final).'/'.$target;
if(substr($final, 0, 2)=='./') $final = substr($final, 2);
if(!is_link($final)) return $final;
}
}
casinero dot triste at OH_NO_SPAM dot gmail dot com ¶
7 years ago
A little function to readlink TO THE END:
(realpath can't do this if the symlink (ultimately) points to a non-existing path, since it just returns false in this case.)
function readlinkToEnd($linkFilename) {
if(!is_link($linkFilename)) return $linkFilename;
$final = $linkFilename;
while(true) {
$target = readlink($final);
if(substr($target, 0, 1)=='/') $final = $target;
else $final = dirname($final).'/'.$target;
if(substr($final, 0, 2)=='./') $final = substr($final, 2);
if(!is_link($final)) return $final;
}
}