W3docs

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 restituitotrue se $filename esiste ed è una directory, altrimenti false.

Esempio di base

php— editable, runs on the server

__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() restituisce false, non un errore, quando il percorso non esiste. Un risultato false non significa "questo è un file" — potrebbe semplicemente essere mancante. Usa file_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() restituisce true. Per rilevare il link stesso, usa is_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

FunzioneVerifica
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.

Esercizio

Pratica
Qual è lo scopo della funzione is_dir() in PHP?
Qual è lo scopo della funzione is_dir() in PHP?
Was this page helpful?