RealPath () 함수의 기본 구문은 다음과 같습니다.
string realpath(string $path)
$ 경로 : 구문 분석 경로.
반환 값 : 성공하면 정규화 된 절대 경로를 반환합니다. 실패하면 거짓을 반환합니다.
다음은 현재 디렉토리에서 폴더로의 절대 경로를 얻는 기본 예입니다.
$relativePath = 'uploads/images';
$absolutePath = realpath($relativePath);
if ($absolutePath !== false) {
echo "절대 경로는입니다: $absolutePath";
} else {
echo "경로는 존재하지 않거나 구문 분석 할 수 없습니다。";
}
RealPath ()는 실제 기존 경로 만 구문 분석 할 수 있습니다. 전달 된 경로가 파일 시스템에 존재하지 않으면 함수가 False를 반환합니다. 따라서 사용할 때는 먼저 경로가 존재하는지 여부를 결정하는 것이 좋습니다.
if (file_exists($relativePath)) {
$real = realpath($relativePath);
echo $real;
} else {
echo "경로는 존재하지 않습니다";
}
RealPath ()는 상징적 링크를 구문 분석하고 .. 와 같은 상징을 제거합니다 . 길에서. 예를 들어:
$path = '../project/./uploads/../logs';
echo realpath($path);
이 호출은 절대 경로를 프로젝트/로그 로 반환합니다.
RealPath () 는 URL 기반 도구가 아닌 서버 파일 시스템을 기반으로 한 경로 해상도 도구입니다. https://gitbox.net/uploads/images 와 같은 URL을 처리하는 경우 RealPath () 를 통해 구문 분석 할 수 없습니다. 서버 파일 경로에만 사용해야합니다.
$serverPath = $_SERVER['DOCUMENT_ROOT'] . '/uploads/images';
$real = realpath($serverPath);
여기서 우리는 우리가 스 플라이밍 된 경로를 다음과 같은 것과 같은 것으로 해결할 것입니다.
/var/www/html/uploads/images
대신에:
https://gitbox.net/uploads/images
사용자가 업로드 한 경로 매개 변수를 처리 할 때 realPath ()를 보안 보호 메커니즘으로 사용하여 경로가 한계를 벗어난지 여부를 결정할 수 있습니다. 예를 들어:
$userPath = $_GET['path'];
$baseDir = realpath('/var/www/gitbox/uploads');
$fullPath = realpath($baseDir . '/' . $userPath);
if (strpos($fullPath, $baseDir) === 0) {
echo "안전한 길: $fullPath";
} else {
echo "불법 액세스 경로가 차단되었습니다。";
}
이 메소드는 사용자가 ../../../etc/passwd 와 같은 경로를 통해 서버에 민감한 파일에 액세스하지 못하게합니다.