(PHP 4, PHP 5, PHP 7, PHP 8)
link — Crea un enlace
targetEl destino del enlace.
linkEl nombre del enlace.
La función falla y emite una E_WARNING si
link ya existe, o si
target no existe.
Ejemplo #1 Creación de un enlace
<?php
$target = 'source.ext'; // Este es el fichero que existe actualmente
$link = 'newfile.ext'; // Este será el nombre del fichero que se desea enlazar
link($target, $link);
?>Nota: Esta función no funciona con los archivos remotos, ya que el archivo examinado debe ser accesible en el sistema de archivos del servidor.
Nota: Windows únicamente: esta función requiere un nivel de funcionamiento con derechos elevados, o bien la desactivación de UAC.
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 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.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