HOWTO · PHP
Controlla se il file esiste in PHP
Questo articolo introduce come verificare se un file esiste in PHP. Include la funzione file_exists().
In questa pagina
Usa file_exists() di PHP per verificare se un percorso corrisponde in quel momento a un file o a una directory esistente. La funzione restituisce un valore booleano, quindi puoi usare il risultato per decidere come procedere. Il controllo descrive lo stato del percorso in quel preciso momento: non garantisce che una successiva operazione sul file riesca.
Verificare se un percorso esiste con file_exists()
Passa il percorso come stringa. Questo esempio autonomo crea un file temporaneo, ne verifica l’esistenza e poi lo elimina: il ramo di successo non dipende quindi da un file già presente nel progetto.
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
$directory = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'file-exists-' . uniqid('', true);
mkdir($directory);
$file = $directory . DIRECTORY_SEPARATOR . 'example.txt';
file_put_contents($file, 'Ready');
if (file_exists($file)) {
echo "File is ready.\n";
} else {
echo "File was not found.\n";
}
unlink($file);
rmdir($directory);
L’esempio non include un risultato dichiarato, perché questo packet non contiene prove di esecuzione. Nel tuo codice, applica lo stesso schema condizionale al percorso che vuoi controllare. Un risultato true indica che il percorso esiste; false indica che PHP non lo ha trovato al momento del controllo.
Distinguere i file dalle directory
Anche file_exists() restituisce true per una directory. Se il passaggio successivo richiede specificamente una directory, verificala con is_dir(); per un file normale, usa is_file(). Questi controlli rispondono a domande diverse: la sola esistenza non indica il tipo di percorso.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
$path = __DIR__ . DIRECTORY_SEPARATOR . 'uploads';
if (is_dir($path)) {
echo 'The path is a directory.';
} elseif (is_file($path)) {
echo 'The path is a file.';
} else {
echo 'No file or directory was found at this path.';
}
Il percorso viene costruito a partire da __DIR__, che indica la directory contenente il file PHP corrente. Modifica l’ultimo componente del percorso in base alla posizione che la tua applicazione deve controllare.
Gestire i percorsi e i risultati dei controlli in sicurezza
Un percorso relativo viene interpretato nel contesto del processo PHP in esecuzione: la stessa stringa può quindi indicare posizioni diverse se cambia la directory di lavoro. Un percorso assoluto parte dalla radice del file system e rende esplicita la posizione desiderata. Se un percorso relativo produce un risultato inatteso, controlla quale percorso sta usando PHP: per esempio, durante la diagnosi puoi combinarlo con getcwd(), oppure costruirlo a partire da una directory nota, come __DIR__.
Usa il controllo per scegliere un passo successivo sensato, ma considera comunque soggetta a errori l’operazione stessa. Il percorso può cambiare dopo il controllo e la sua esistenza non garantisce che il processo possa leggerlo, scriverci o utilizzarlo in altro modo. Controlla anche il risultato dell’operazione effettiva e gestiscine l’eventuale errore in base alle esigenze dell’applicazione.
Limiti comuni e risoluzione dei problemi
Se file_exists() restituisce false inaspettatamente, verifica che il percorso sia scritto e costruito correttamente, poi controlla che indichi la posizione desiderata nell’ambiente del processo PHP. Valuta anche se il percorso è cambiato tra un controllo e l’altro o se il processo in esecuzione può esaminare la posizione pertinente nel file system. La funzione controlla l’esistenza del percorso, ma non individua la causa di un risultato false.
Il manuale di PHP descrive file_exists() come una funzione che controlla se esiste un file o una directory e precisa che il risultato dipende dal contesto del file system configurato. Non usarla per verificare la disponibilità di una risorsa remota: scegli invece il meccanismo specifico del protocollo o del servizio appropriato. Consulta il manuale di PHP per file_exists() per informazioni sul parametro, sul valore restituito e sulle note della funzione.
Se esegui controlli ripetuti, non presumere che un risultato precedente sia ancora valido. Quando possibile, esegui direttamente l’operazione necessaria e gestiscine il risultato. In questo modo il programma resta corretto anche se il file system cambia tra il controllo e l’operazione.