linkinfo()
La función linkinfo() de PHP devuelve información sobre un enlace duro, incluyendo el identificador de dispositivo donde se almacena el enlace.
¿Qué es la función linkinfo()?
La función linkinfo() es una función integrada de PHP que comprueba si un enlace existe realmente y, en sistemas Unix, devuelve el dispositivo en el que reside. Específicamente, devuelve el campo st_dev de la estructura C stat producida por la llamada al sistema lstat() — un entero que identifica el dispositivo (disco/partición) que contiene el enlace.
En la práctica, linkinfo() es más útil como verificación rápida de existencia: si devuelve 0 o un entero positivo, el enlace existe; si devuelve -1 o false, la ruta falta, está rota o es inaccesible. A pesar del nombre, no devuelve el número de enlaces duros — esa información proviene del elemento nlink de stat() o lstat().
Esta página cubre la sintaxis de la función, los valores de retorno, un ejemplo ejecutable, errores comunes y funciones del sistema de archivos relacionadas.
Sintaxis
linkinfo(string $path): int|falseLa función acepta un único parámetro:
$path— la ruta al enlace simbólico o duro que desea inspeccionar.
Devuelve:
- un entero no negativo (el identificador de dispositivo
st_dev) cuando el enlace existe, -1cuando el enlace no puede leerse perolstattiene éxito parcialmente, ofalsesi$pathno existe o no puede accederse.
Dado que 0 es un valor de retorno válido pero "verdadero-pero-falso" en algunas plataformas, siempre compare con !== false en lugar de depender de una comprobación booleana flexible.
Cómo usar la función linkinfo()
Siga estos pasos:
- Especifique la ruta al enlace simbólico o duro que desea comprobar.
- Llame a
linkinfo()pasando la ruta. - Compare el resultado estrictamente contra
falsepara decidir si el enlace existe.
El siguiente ejemplo crea un archivo real y un enlace simbólico a él, luego inspecciona el enlace con linkinfo():
<?php
// Set up a file and a symbolic link to it in the temp directory.
$target = tempnam(sys_get_temp_dir(), 'tgt');
$link = sys_get_temp_dir() . '/example_link';
@unlink($link); // remove a leftover link from a previous run
symlink($target, $link); // create the symlink
$info = linkinfo($link);
if ($info !== false) {
echo "The link '$link' exists. Device id (st_dev): $info" . PHP_EOL;
} else {
echo "The link '$link' does not exist or is inaccessible." . PHP_EOL;
}
// A path that doesn't exist fails: false on most systems, -1 on some
// Unix builds (a warning may also be emitted), so treat both as "missing".
$missing = @linkinfo('/no/such/link');
var_dump($missing === false || $missing === -1); // bool(true) -> "missing"
// Clean up.
unlink($link);
unlink($target);Una ejecución típica imprime algo como:
The link '/tmp/example_link' exists. Device id (st_dev): 16777220
bool(true)El identificador de dispositivo exacto depende de su sistema operativo y sistema de archivos, por lo que no lo codifique de forma fija — solo su presencia es significativa. Para la ruta faltante, PHP devuelve false en la mayoría de las plataformas y -1 en algunas compilaciones Unix, por eso el ejemplo trata ambos como "no encontrado."
Errores comunes
- Windows.
linkinfo()no es significativa en Windows y efectivamente solo indica si la ruta es un enlace. Úsela para comprobar existencia, no el número de dispositivo. - Use
!== false, no!$info. En algunos sistemas un enlace válido devuelve0, que una comprobación flexible trataría como "faltante." - No sigue el enlace.
linkinfo()inspecciona el enlace en sí mismo (comolstat), no el archivo al que apunta el enlace. Un enlace simbólico a un destino eliminado sigue reportándose como existente. - No sirve para contar enlaces duros. Use
stat($path)['nlink']si necesita el recuento de enlaces duros.
Funciones relacionadas
symlink()— crear un enlace simbólico.link()— crear un enlace duro.readlink()— devolver el destino al que apunta un enlace simbólico.is_link()— comprobar si una ruta es un enlace simbólico.lstat()— información de estado completa para un enlace sin seguirlo.
Conclusión
La función linkinfo() es una forma ligera de confirmar que un enlace existe y de leer el dispositivo en el que reside, reflejando el campo st_dev de lstat(). Úsela para verificaciones de existencia (siempre con una comparación estricta !== false), y recurra a stat() o is_link() cuando necesite detalles más completos como el recuento de enlaces duros o el tipo de enlace.