is_dir()
La funzione is_dir() è una funzione PHP integrata che verifica se un determinato percorso è una directory, restituendo true o false.
Cos'è la funzione is_dir()?
La funzione is_dir() è una funzione PHP integrata che indica se un determinato percorso esiste e punta a una directory (cartella). Restituisce true quando il percorso è una directory esistente, e false in tutti gli altri casi — un file normale, un percorso che non esiste, o un percorso per cui non si dispone dei permessi di lettura.
È una delle funzioni PHP di "controllo del tipo" per il filesystem, insieme a is_file(), is_link() e file_exists(). Usa is_dir() ogni volta che devi verificare che una directory esista prima di leggerla, scrivere al suo interno o crearla.
Sintassi
is_dir(string $filename): bool$filename— il percorso da verificare. Può essere assoluto (/var/www/uploads) o relativo alla directory di lavoro corrente dello script (uploads). È consentita una barra finale.- Valore restituito —
truese$filenameesiste ed è una directory, altrimentifalse.
Esempio di base
__DIR__ è una costante magica che punta sempre a una directory esistente, quindi questo esempio stampa in modo affidabile il ramo "is a directory".
Distinguere una directory da un file
L'uso più comune di is_dir() è quello di ramificare l'esecuzione in base a ciò che un percorso è effettivamente. Confrontalo con is_file():
<?php
$paths = [__DIR__, __FILE__, '/path/that/does/not/exist'];
foreach ($paths as $path) {
if (is_dir($path)) {
echo "$path -> directory\n";
} elseif (is_file($path)) {
echo "$path -> file\n";
} else {
echo "$path -> missing\n";
}
}__FILE__ è il percorso completo dello script corrente, quindi viene segnalato come file, mentre il percorso inventato viene segnalato come mancante.
Un uso pratico: creare la directory solo se mancante
Proteggere mkdir() con is_dir() evita un avviso quando la cartella esiste già:
<?php
$dir = sys_get_temp_dir() . '/my_app_cache';
if (!is_dir($dir)) {
mkdir($dir, 0755, true); // true = create parent dirs too
echo "Created: $dir";
} else {
echo "Already exists: $dir";
}Errori comuni
is_dir()restituiscefalse, non un errore, quando il percorso non esiste. Un risultatofalsenon significa "questo è un file" — potrebbe semplicemente essere mancante. Usafile_exists()se ti interessa solo che qualcosa sia presente.- I link simbolici vengono seguiti. Se il percorso è un symlink che punta a una directory,
is_dir()restituiscetrue. Per rilevare il link stesso, usais_link(). - I risultati vengono memorizzati nella cache. PHP memorizza i risultati di stat(), quindi se una directory viene creata o eliminata da un altro processo durante l'esecuzione dello script potresti ricevere una risposta obsoleta. Chiama
clearstatcache()per forzare un nuovo controllo. - I percorsi relativi dipendono dalla directory di lavoro.
is_dir('data')viene risolto rispetto alla directory di lavoro corrente (getcwd()), non alla posizione dello script. Usa__DIR__ . '/data'quando intendi "accanto a questo script".
Funzioni correlate
| Funzione | Verifica |
|---|---|
is_file() | Un file normale |
is_link() | Un link simbolico |
file_exists() | L'esistenza di un file o una directory |
is_readable() | Un percorso leggibile |
scandir() | Il contenuto di una directory |
mkdir() | La creazione di una directory |
Conclusione
is_dir() è il modo sicuro e standard per verificare che un percorso sia una directory esistente prima di agire su di esso. Ricorda che segue i symlink, memorizza il risultato nella cache e risolve i percorsi relativi rispetto alla directory di lavoro corrente — abbinarla a file_exists(), is_file() e mkdir() copre quasi ogni situazione di gestione delle directory che incontrerai.