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
realpathpe un fișier pe care urmează să îl creezi. Fișierul nu există încă, deci rezultatul estefalse. Aplicărealpathpe directorul părinte. - Nu verifici rezultatul
falseși lipești mai departe calea.falsedevine 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.