©
                    本文档使用
                    php中文网手册 发布
                
(PHP 4, PHP 5, PHP 7)
link — 建立一个硬连接
$target 
   ,  string $link 
   )link() 建立一个硬连接。
target 要链接的目标。
link 链接的名称。
   成功时返回  TRUE , 或者在失败时返回  FALSE 。
  
Note: Windows下:该功能需要以 elevated 模式运行,或者关闭 UAC。
| 版本 | 说明 | 
|---|---|
| 5.3.0 | 该功能在 Windows 平台下开始有效(Vista、 Server 2008 或更高版本)。 | 
Example #1 Creating a simple hard link
  <?php
$target  =  'source.ext' ;  // This is the file that already exists
 $link  =  'newfile.ext' ;  // This the filename that you want to link it to
 link ( $target ,  $link );
 ?>   Note: 此函数不能作用于远程文件,被检查的文件必须是可通过服务器的文件系统访问的。
[#1] Anonymous [2009-10-16 01:54:56]
to clarify:
in unix/linux:
hardlinks (by this function) cannot go across different filesystems.
softlinks can point anywhere.
in linux, hardlinking to directory is not permited.
[#2] stephane AT baladeauboutdumonde DOT com [2007-08-06 11:45:07]
Make link recursively :
<?php
function makeRecusLink($orig, $dest)
{
    if (is_dir($orig)) {
        if (substr($orig, -1) != '/') {
            $orig .= '/';
        }
        $handle = opendir($orig);
        while (false !== ($file = readdir($handle))) {
            if ($file != '.' && $file != '..') {
                $path = $orig.$file;
                if (is_file($path)) {
                    @link($path, $dest.'/'.$file);
                } else if (is_dir($path)) {
                    @mkdir($dest.'/'.$file, 0755);                    
                    makeRecusLink($path, $dest.'/'.$file);
                }
            }
        }
    }
    
    closedir($handle);
}
?>
[#3] Jasper Bekkers [2006-08-02 07:16:51]
For a backup utility I needed link-like functionality on a windows system. As it isn't availible on windows, i tried to do it myself with the help of some tools. All you need is junction.exe from sysinternals in your %PATH%.
<?php
if(!function_exists('link')){ // Assume a windows system
    function link($target, $link){
        if(is_dir($target)){
            // junctions link to directories in windows
            exec("junction $link $target", $lines, $val);
            return 0 == $val;
        }elseif(is_file($target)){
            // Hardlinks link to files in windows
            exec("fsutil hardlink create $link $target", $lines, $val);
            return 0 == $val;
        }
        
        return false;
    }
}
?>
http://www.sysinternals.com/Utilities/Junction.html
[#4] Guilherme Garnier [2006-04-25 11:32:10]
I noticed that, differently from Unix ln command, the second parameter can?t be a directory name, i.e., if you want to create a link with the same filename of the target file (obviously on different directories), you must specify the filename on the link parameter.
Example:
Unix ln command:
ln /dir1/file /dir2/   // ok, creates /dir2/file link
PHP link function:
link ("/dir1/file", "/dir2/");   // wrong, gives a "File exists" warning
link ("/dir1/file", "/dir2/file");   // ok, creates /dir2/file link