W3docs

filetype()

La funzione filetype() è una funzione PHP integrata che restituisce il tipo di un file come string.

Cos'è la funzione filetype()?

filetype() è una funzione PHP integrata che indica che tipo di elemento del filesystem rappresenta un percorso — un file normale, una directory, un collegamento simbolico e così via. Accetta un singolo percorso e restituisce il tipo come string in minuscolo, oppure false in caso di errore.

È utile quando si scorre una directory e occorre trattare file e sottodirectory in modo diverso, quando si vuole verificare che un file caricato sia finito nel posto previsto, oppure quando è necessario saltare voci speciali (pipe, file di dispositivo) che non devono essere lette come file ordinari.

Ecco la sintassi:

La sintassi PHP di filetype()

filetype(string $filename): string|false

Dove $filename è un percorso relativo o assoluto all'elemento che si desidera ispezionare.

Valori restituiti

filetype() restituisce una delle seguenti string:

String restituitaSignificato
fileUn file normale
dirUna directory
linkUn collegamento simbolico
fifoUna pipe con nome (FIFO)
socketUn socket di dominio Unix
blockUn dispositivo a blocchi speciale (es. un disco)
charUn dispositivo a caratteri speciale (es. un terminale)
unknownIl tipo non ha potuto essere determinato

Se il percorso non esiste o non può essere letto, filetype() restituisce false ed emette un E_WARNING. Poiché false risulta uguale alla string vuota in un confronto non stretto, verificare sempre il risultato con === prima di utilizzarlo.

Come si usa la funzione filetype()?

Passare un percorso ed esaminare la string restituita:

Utilizzo di base

<?php

$path = __FILE__;          // the path of the currently running script
$type = filetype($path);

echo "The entry '$path' is of type: $type";
// e.g. The entry '/var/www/index.php' is of type: file

L'uso di __FILE__ garantisce che il percorso esista, quindi l'esempio funziona ovunque senza configurazione.

Gestire il ritorno false

Poiché filetype() restituisce false per un percorso mancante o non leggibile, è necessario proteggere la chiamata prima di usare il risultato. Controllare prima con file_exists() evita del tutto l'avviso:

Ricerca sicura

<?php

$path = '/path/that/does/not/exist';

if (!file_exists($path)) {
    echo "Path not found.";
} else {
    $type = filetype($path);
    echo $type === false
        ? "Could not determine the type."
        : "Type: $type";
}
// Path not found.

Distinguere file da directory durante un ciclo

Un compito comune è scorrere una directory e agire solo sui file o solo sulle sottodirectory. filetype() rende il ramo esplicito:

Classificare le voci di una directory

<?php

$dir = sys_get_temp_dir();          // a directory that always exists

foreach (scandir($dir) as $entry) {
    if ($entry === '.' || $entry === '..') {
        continue;                   // skip the self/parent references
    }

    $full = $dir . DIRECTORY_SEPARATOR . $entry;
    echo $entry . ' => ' . filetype($full) . PHP_EOL;
}

Qui scandir() elenca il contenuto della directory e filetype() etichetta ogni voce. Per un attraversamento di livello inferiore è possibile usare readdir() con opendir().

filetype() vs. is_file() e is_dir()

Quando si ha bisogno solo di una risposta sì/no per un tipo specifico, le funzioni predicato dedicate sono più chiare e non richiedono un confronto di string:

  • is_file()true se il percorso è un file normale.
  • is_dir()true se il percorso è una directory.

Usare filetype() quando è necessario distinguere tra diversi tipi possibili in un unico punto (ad esempio per saltare FIFO e socket), e usare is_file() / is_dir() quando un singolo controllo boolean risulta più leggibile.

Attenzione alla cache delle stat

PHP memorizza nella cache i risultati delle funzioni del filesystem per la durata di una richiesta, quindi se un percorso viene creato, eliminato o sostituito dopo il primo controllo, filetype() potrebbe restituire un valore obsoleto. Chiamare clearstatcache() per forzare una nuova lettura. Si noti inoltre che filetype() segue i collegamenti simbolici come fa stat() — per rilevare il collegamento stesso, usare lstat().

Conclusione

filetype() restituisce il tipo di un elemento del filesystem come string (file, dir, link e così via) e false in caso di errore. Verificare il risultato con ===, controllare il percorso con file_exists() per evitare avvisi, e ricordarsi di clearstatcache() quando si ricontrolla un percorso che è cambiato durante la richiesta. Per controlli semplici su un singolo tipo preferire is_file() e is_dir(); per l'insieme completo delle statistiche di un file in un'unica chiamata, vedere stat().

Pratica

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