pathinfo în PHP

Directoare și căi PHP 4.0.3+

Împarte o cale de fișier în director, nume complet, nume fără extensie și extensie.

Sintaxă
pathinfo(string $path, int $flags = PATHINFO_ALL): array|string

Ce face pathinfo

pathinfo analizează doar textul căii, fără să verifice dacă fișierul există. Returnează un tablou cu cheile dirname, basename, extension și filename.

Dacă ai nevoie de o singură parte, dai al doilea parametru: PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION sau PATHINFO_FILENAME. Atunci rezultatul este un text.

Parametri

Parametru Descriere
$path Calea analizată.
$flags Opțional. Una dintre constantele PATHINFO_*, ca să primești doar acea parte.

Ce returnează

Un tablou cu părțile căii sau, cu $flags, textul cerut.

Exemple

Exemplul 1: Toate părțile unei căi

Extensia este doar ce urmează după ultimul punct.

<?php
print_r(pathinfo("/var/www/poze/vacanta.mare.jpg"));

Rezultat

Array
(
    [dirname] => /var/www/poze
    [basename] => vacanta.mare.jpg
    [extension] => jpg
    [filename] => vacanta.mare
)

Exemplul 2: Verificarea extensiei unei imagini

Transformăm extensia în litere mici, ca POZA.JPG să fie acceptată la fel ca poza.jpg.

<?php
$permise = ["jpg", "jpeg", "png", "webp"];

foreach (["concediu.JPG", "cv.pdf", "logo.png"] as $nume) {
    $extensie = strtolower(pathinfo($nume, PATHINFO_EXTENSION));
    echo $nume . ": " . (in_array($extensie, $permise) ? "acceptat" : "respins") . "\n";
}

Rezultat

concediu.JPG: acceptat
cv.pdf: respins
logo.png: acceptat

Exemplul 3: Fișier fără extensie

Cheia extension lipsește din tablou, deci folosim ?? pentru o valoare implicită.

<?php
$info = pathinfo("README");

print_r($info);
echo "Extensie: '" . ($info["extension"] ?? "") . "'";

Rezultat

Array
(
    [dirname] => .
    [basename] => README
    [filename] => README
)
Extensie: ''

Greșeli frecvente

  • Accesezi $info["extension"] pentru un fișier fără extensie și primești Warning: Undefined array key. Folosește ?? "".
  • Te bazezi doar pe extensie ca să verifici că un fișier încărcat este imagine. Extensia se poate falsifica ușor. Verifică și conținutul (de exemplu cu getimagesize).

Comenzi înrudite

  • basename: Returnează doar numele fișierului dintr-o cale, fără directoare.
  • dirname: Returnează directorul părinte al unei căi.
  • realpath: Transformă o cale relativă într-o cale absolută, fără ../ și fără scurtături.