Die grundlegende Syntax der RealPath () -Funktion lautet wie folgt:
string realpath(string $path)
$ PATH : Der Weg zum Analysen.
Rückgabewert: Gibt den normalisierten absoluten Weg zurück, wenn er erfolgreich ist; Gibt falsche zurück, wenn es fehlgeschlagen ist.
Hier ist ein grundlegendes Beispiel dafür, dass der absolute Pfad zu einem Ordner im aktuellen Verzeichnis einbezogen wird:
$relativePath = 'uploads/images';
$absolutePath = realpath($relativePath);
if ($absolutePath !== false) {
echo "Der absolute Weg ist: $absolutePath";
} else {
echo "Der Weg existiert nicht oder kann nicht analysiert werden。";
}
RealPath () kann nur den tatsächlichen vorhandenen Pfad analysieren. Wenn der Pfad, den Sie übergeben, im Dateisystem nicht vorhanden ist, gibt die Funktion falsch zurück. Bei der Verwendung wird daher empfohlen, zuerst festzustellen, ob der Pfad vorhanden ist:
if (file_exists($relativePath)) {
$real = realpath($relativePath);
echo $real;
} else {
echo "Der Weg existiert nicht";
}
RealPath () analysiert die symbolische Verbindung und eliminiert Symbole wie .. und . auf dem Weg. Zum Beispiel:
$path = '../project/./uploads/../logs';
echo realpath($path);
Dieser Anruf gibt den absoluten Pfad zu Projekt/Protokollen zurück.
Es ist zu beachten, dass RealPath () ein Tool zur Pfadauflösung basiert, das auf dem Serverdateisystem basiert und kein URL-basierter Tool. Wenn Sie mit URLs wie https://gitbox.net/uploads/images zu tun haben, kann dies nicht über RealPath () analysiert werden. Sie sollten es nur für den Serverdateipfad verwenden:
$serverPath = $_SERVER['DOCUMENT_ROOT'] . '/uploads/images';
$real = realpath($serverPath);
Hier haben wir die Wege gespleißt, die wir gespleißt werden, werden sich zu so etwas beschränken:
/var/www/html/uploads/images
Stattdessen:
https://gitbox.net/uploads/images
Wenn die von den Benutzern hochgeladenen Verarbeitung von Pfadparametern verarbeitet werden, kann RealPath () als Sicherheitsschutzmechanismus verwendet werden, um festzustellen, ob der Pfad keine Grenzen ist. Zum Beispiel:
$userPath = $_GET['path'];
$baseDir = realpath('/var/www/gitbox/uploads');
$fullPath = realpath($baseDir . '/' . $userPath);
if (strpos($fullPath, $baseDir) === 0) {
echo "Sicherer Weg: $fullPath";
} else {
echo "Der illegale Zugangspfad ist blockiert。";
}
Diese Methode verhindert, dass Benutzer auf server-sensitive Dateien über Pfade wie ../../../etc/passwd zugreifen.