W3docs

linkinfo()

La funzione linkinfo() in PHP restituisce informazioni su un hard link, utile per verificarne l'esistenza e ottenere l'identificatore del dispositivo.

Cos'è la funzione linkinfo()?

La funzione linkinfo() è una funzione PHP incorporata che verifica se un link esiste effettivamente e, nei sistemi Unix, restituisce il dispositivo su cui risiede. In particolare, restituisce il campo st_dev della struttura C stat prodotta dalla chiamata di sistema lstat() — un intero che identifica il dispositivo (disco/partizione) che contiene il link.

In pratica, linkinfo() è più utile come rapido controllo di esistenza: se restituisce 0 o un intero positivo, il link esiste; se restituisce -1 o false, il percorso è mancante, interrotto o inaccessibile. Nonostante il nome, non restituisce il numero di hard link — tale informazione proviene dall'elemento nlink di stat() o lstat().

Questa pagina tratta la sintassi della funzione, i valori restituiti, un esempio eseguibile, le insidie comuni e le funzioni filesystem correlate.

Sintassi

linkinfo(string $path): int|false

La funzione accetta un singolo parametro:

  • $path — il percorso del link simbolico o hard link che si desidera ispezionare.

Restituisce:

  • un intero non negativo (l'identificatore del dispositivo st_dev) quando il link esiste,
  • -1 quando il link non può essere letto ma lstat ha successo parziale, oppure
  • false se $path non esiste o non è accessibile.

Poiché 0 è un valore di ritorno valido, "truthy-but-falsy" su alcune piattaforme, confrontare sempre con !== false anziché affidarsi a un test booleano approssimativo.

Come usare la funzione linkinfo()

Seguire questi passaggi:

  1. Specificare il percorso del link simbolico o hard link da controllare.
  2. Chiamare linkinfo(), passando il percorso.
  3. Confrontare il risultato rigorosamente con false per stabilire se il link esiste.

L'esempio seguente crea un file reale e un link simbolico ad esso, quindi ispeziona il link 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 tipica esecuzione stampa qualcosa del genere:

The link '/tmp/example_link' exists. Device id (st_dev): 16777220
bool(true)

L'id del dispositivo esatto dipende dal sistema operativo e dal filesystem, quindi non codificarlo a dura — solo la sua presenza è significativa. Per il percorso mancante, PHP restituisce false sulla maggior parte delle piattaforme e -1 su alcune build Unix, motivo per cui l'esempio tratta entrambi come "non trovato."

Insidie Comuni

  • Windows. linkinfo() non è significativo su Windows e indica sostanzialmente solo se il percorso è un link. Fare affidamento su di esso per l'esistenza, non per il numero del dispositivo.
  • Usare !== false, non !$info. Su alcuni sistemi un link valido restituisce 0, che un controllo approssimativo tratterebbe come "mancante."
  • Non segue il link. linkinfo() ispeziona il link stesso (come lstat), non il file a cui punta il link. Un symlink verso un target eliminato viene comunque segnalato come esistente.
  • Non per contare gli hard link. Usare stat($path)['nlink'] se si necessita del conteggio degli hard link.

Funzioni Correlate

  • symlink() — crea un link simbolico.
  • link() — crea un hard link.
  • readlink() — restituisce il target a cui punta un link simbolico.
  • is_link() — verifica se un percorso è un link simbolico.
  • lstat() — informazioni di stato complete per un link senza seguirlo.

Conclusione

La funzione linkinfo() è un metodo leggero per confermare che un link esiste e per leggere il dispositivo su cui risiede, rispecchiando il campo st_dev di lstat(). Usarla per i controlli di esistenza (sempre con un confronto rigoroso !== false), e ricorrere a stat() o is_link() quando si necessitano dettagli più ricchi come il conteggio degli hard link o il tipo di link.

Pratica

Pratica
Cosa fa la funzione linkinfo() in PHP?
Cosa fa la funzione linkinfo() in PHP?
Was this page helpful?