La syntaxe de base de la fonction realPath () est la suivante:
string realpath(string $path)
$ PATH : Le chemin vers l'analyse.
Valeur de retour: renvoie le chemin absolu normalisé lorsqu'il est réussi; Renvoie false lors de l'échec.
Voici un exemple de base pour obtenir le chemin absolu vers un dossier dans le répertoire actuel:
$relativePath = 'uploads/images';
$absolutePath = realpath($relativePath);
if ($absolutePath !== false) {
echo "Le chemin absolu est: $absolutePath";
} else {
echo "Le chemin n'existe pas ou ne peut pas être analysé。";
}
RealPath () ne peut que l'analyse du chemin existant réel . Si le chemin dans lequel vous avez traversé n'existe pas dans le système de fichiers, la fonction renvoie false . Par conséquent, lorsque vous l'utilisez, il est recommandé de déterminer d'abord si le chemin existe:
if (file_exists($relativePath)) {
$real = realpath($relativePath);
echo $real;
} else {
echo "Le chemin n'existe pas";
}
realPath () analyse le lien symbolique et élimine des symboles tels que .. et . sur le chemin. Par exemple:
$path = '../project/./uploads/../logs';
echo realpath($path);
Cet appel renverra le chemin absolu de projeter / journaux .
Il convient de noter que RealPath () est un outil de résolution de chemin basé sur le système de fichiers serveur, pas un outil basé sur URL. Si vous traitez avec des URL, telles que https://gitbox.net/uploads/images , cela ne peut pas être analysé via realPath () . Vous ne devez l'utiliser que pour le chemin du fichier du serveur:
$serverPath = $_SERVER['DOCUMENT_ROOT'] . '/uploads/images';
$real = realpath($serverPath);
Ici, nous avons épissé les chemins que nous avons épissés se résoudront à quelque chose comme:
/var/www/html/uploads/images
Plutôt:
https://gitbox.net/uploads/images
Lors du traitement des paramètres de chemin téléchargés par les utilisateurs, RealPath () peut être utilisé comme mécanisme de protection de la sécurité pour déterminer si le chemin est hors limites. Par exemple:
$userPath = $_GET['path'];
$baseDir = realpath('/var/www/gitbox/uploads');
$fullPath = realpath($baseDir . '/' . $userPath);
if (strpos($fullPath, $baseDir) === 0) {
echo "Chemin sûr: $fullPath";
} else {
echo "Le chemin d'accès illégal est bloqué。";
}
Cette méthode empêche les utilisateurs d'accéder à des fichiers sensibles au serveur à travers des chemins comme ../../../etc/passwd .