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.(PHP 4, PHP 5, PHP 7, PHP 8)
link — Sabit bir bağ oluşturur
hedefBağın hedefi.
bağBağ dosyası ismi.
   bağ zaten varsa veya hedef
   mevcut değilse işlev başarısız olur ve bir E_WARNING
   üretir.
  
Örnek 1 - Basit bir sabit bağ oluşturma örneği
<?php
$hedef = 'mevcut.uzt'; // Bu dosya mevcut.
$bağ = 'yeni.uzt';     // Bu da bağ dosyamız olsun.
link($hedef, $bağ);
?>Bilginize: Dosyaların sunucunun dosya sistemi üzerinden erişilebilir olması gerektiğinden bu işlev uzak dosyalar üzerinde çalışmayacaktır.
Bilginize: Sadece Windows için: Bu işlev, PHP'nin yükseltilmiş bir kipte veya UAC devre dışı bırakılmış durumda çalışmasını gerektirir.
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.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.htmlI 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