W3docs

pathinfo()

La funzione pathinfo() di PHP divide un percorso file in directory, nome file ed estensione, restituendo un array associativo.

Cos'è la funzione pathinfo()?

La funzione pathinfo() è una funzione integrata di PHP che suddivide un percorso file nelle sue parti — la directory, il nome del file e l'estensione — e le restituisce come array associativo. È lo strumento ideale ogni volta che occorre rispondere a domande come "in quale cartella si trova questo file?" o "qual è l'estensione di un file caricato?" senza dover scrivere la propria logica di parsing delle stringhe.

Un aspetto fondamentale da capire fin da subito: pathinfo() opera esclusivamente sulla stringa fornita. Non accede mai al filesystem, quindi il percorso non deve necessariamente puntare a un file realmente esistente. Questo la rende veloce e sicura da utilizzare su valori forniti dall'utente (ad esempio, il nome originale di un file caricato).

Questa pagina tratta la sintassi, l'array restituito da pathinfo(), come richiedere un singolo componente e i casi limite che possono sorprendere (nessuna estensione, dotfile, estensioni composte).

Sintassi

pathinfo(string $path, int $flags = PATHINFO_ALL): array|string
  • $path — il percorso del file da analizzare. Può essere assoluto o relativo e non è necessario che esista.
  • $flags — opzionale. Se omesso (o impostato su PATHINFO_ALL), la funzione restituisce un array associativo. Se impostato su un singolo flag, restituisce solo quel componente come stringa.

L'array restituito da pathinfo()

Per impostazione predefinita pathinfo() restituisce un array associativo con al massimo quattro chiavi:

ChiaveSignificatoEsempio per /var/www/html/index.php
dirnameLa parte relativa alla directory/var/www/html
basenameIl nome completo del file con estensioneindex.php
extensionL'estensione (senza il punto)php
filenameIl nome del file senza estensioneindex
php— editable, runs on the server

Qui passiamo il percorso del file e memorizziamo l'array risultante in $info, quindi leggiamo ogni componente tramite la sua chiave.

Importante: la chiave extension esiste solo quando il percorso contiene effettivamente un .. Se il percorso non ha estensione, quella chiave sarà semplicemente assente dall'array, quindi accedere direttamente a $info['extension'] genererebbe un avviso "Undefined array key". Usare $info['extension'] ?? '' in caso di dubbio.

Restituire un singolo componente

Se è necessaria una sola parte, passare un flag come secondo argomento. I flag disponibili sono PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION e PATHINFO_FILENAME. Con un singolo flag la funzione restituisce una stringa invece di un array:

php— editable, runs on the server

Questo è il modo più semplice per ottenere solo l'estensione — ad esempio, per verificare che un file caricato sia di un tipo consentito.

Casi limite da tenere a mente

pathinfo() è tollerante, ma alcuni risultati possono sorprendere:

<?php

// 1. No extension: the 'extension' key is missing entirely.
print_r(pathinfo('/etc/hosts'));
// Array ( [dirname] => /etc [basename] => hosts [filename] => hosts )

// 2. Multi-part extension: only the LAST part counts as the extension.
print_r(pathinfo('archive.tar.gz'));
// Array ( [dirname] => . [basename] => archive.tar.gz
//         [extension] => gz [filename] => archive.tar )

// 3. Dotfile: the leading dot makes the whole name the "extension".
print_r(pathinfo('/home/user/.bashrc'));
// Array ( [dirname] => /home/user [basename] => .bashrc
//         [extension] => bashrc [filename] =>  )

Note:

  • Un percorso senza directory (caso 2) riporta dirname come . (la directory corrente).
  • Per i nomi in stile .tar.gz, pathinfo() considera solo gz come estensione — non esiste un modo integrato per ottenere tar.gz in una singola chiamata.
  • Un dotfile come .bashrc viene letto come "un file senza nome con estensione bashrc," che raramente corrisponde a quanto desiderato. Gestire questi casi manualmente se il codice li consente.

Quando usare pathinfo()

Utilizzare pathinfo() quando occorre più di una parte di un percorso alla volta, o quando si preferisce un array nominativo e leggibile invece di ricordare quale funzione dedicata fa cosa:

  • Usare pathinfo($p) per ottenere directory, nome e estensione insieme.
  • Usare basename() se si vuole solo il nome del file — consente anche di rimuovere un suffisso noto.
  • Usare dirname() se si vuole solo la directory, che gestisce più livelli tramite il suo argomento $levels.
  • Usare realpath() quando occorre risolvere un percorso rispetto al filesystem reale (symlink, .., ecc.) — a differenza di pathinfo(), accede al disco e restituisce false per i file mancanti.

Per una panoramica più ampia sulla lettura e scrittura di file, vedere PHP File Handling.

Conclusione

pathinfo() è il modo più rapido per suddividere un percorso file in directory, nome base, estensione e nome puro del file. Ricordare che analizza solo la stringa (non verifica mai se il file esiste), che la chiave extension è assente quando non vi è estensione, e che viene riportata solo l'estensione finale per nomi come archive.tar.gz. Per esigenze relative a un singolo componente, le funzioni dedicate basename() e dirname() sono spesso più chiare.

Pratica

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