realpath în PHP

Transformă o cale relativă într-o cale absolută, fără ../ și fără scurtături.

Sintaxă
realpath(string $path): string|false

Ce face realpath

realpath rezolvă ., .. și legăturile simbolice și returnează calea absolută reală. Spre deosebire de dirname și basename, verifică discul: dacă fișierul nu există, returnează false.

Este folosit pentru a verifica că un fișier cerut de utilizator se află într-un director permis. Compari începutul căii reale cu directorul permis.

Parametri

Parametru Descriere
$path Calea de rezolvat.

Ce returnează

Calea absolută sau false dacă nu există.

Exemple

Exemplul 1: Eliminarea lui ../ dintr-o cale

Am scos partea de la început (directorul curent) ca rezultatul să fie scurt.

<?php
mkdir("site/public", 0777, true);
touch("site/config.php");

$cale = realpath("site/public/../config.php");
echo str_replace(getcwd(), "", $cale);

Rezultat

/site/config.php

Exemplul 2: Fișier inexistent

<?php
var_dump(realpath("nu-exista.txt"));

Rezultat

bool(false)

Exemplul 3: Fișierul cerut trebuie să fie în directorul permis

<?php
mkdir("documente");
touch("documente/ghid.pdf");
touch("parole.txt");

$permis = realpath("documente");

foreach (["ghid.pdf", "../parole.txt"] as $cerut) {
    $cale = realpath("documente/$cerut");
    $ok = $cale !== false && str_starts_with($cale, $permis . DIRECTORY_SEPARATOR);
    echo "$cerut: " . ($ok ? "permis" : "interzis") . "\n";
}

Rezultat

ghid.pdf: permis
../parole.txt: interzis

Greșeli frecvente

  • Folosești realpath pe un fișier pe care urmează să îl creezi. Fișierul nu există încă, deci rezultatul este false. Aplică realpath pe directorul părinte.
  • Nu verifici rezultatul false și lipești mai departe calea. false devine text gol și obții o cale greșită.

Comenzi înrudite

  • dirname: Returnează directorul părinte al unei căi.
  • basename: Returnează doar numele fișierului dintr-o cale, fără directoare.
  • file_exists: Verifică dacă un fișier sau un director există pe disc.