• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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');
    ?>
    

    参见

    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
    ?>
    

    上篇:readfile()

    下篇:realpath_cache_get()