readlink()
(PHP 4, PHP 5, PHP 7)
返回符号连接指向的目标
说明
readlink(string $path): string
readlink()和同名的 C 函数做同样的事,返回符号连接的内容。
参数
- $path
链接符号的路径。
更新日志
版本 | 说明 |
---|---|
5.3.0 | 此函数在 Windows 平台下可用(Vista、Server 2008 或更高版本)。 |
返回值
返回链接的路径内容,出错则返回FALSE
。
范例
Example #1readlink()例
<?php // output e.g. /boot/vmlinux-2.4.20-xfs echo readlink('/vmlinuz'); ?>
参见
is_link()
判断给定文件名是否为一个符号连接symlink()
建立符号连接linkinfo()
获取一个连接的信息
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)
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; } }
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; } }
It is neccesary to be notified that readlink only works for a real link file, if this link file locates to a directory, you cannot detect and read its contents, the is_link() function will always return false and readlink() will display a warning is you try to do. Like the following codes: <?php //assume that A is a directory located in C:, B is a symlink to A, and A contents a file named C. echo is_link('B/C'); //false echo readlink('B/C'); //false and a warning will be displayed //instead, you should use realpath() function to get the real path of C echo realpath('B/C'); //C:\A\C ?>