RealPath()関数の基本的な構文は次のとおりです。
string realpath(string $path)
$パス:解析するパス。
返品値:成功した場合、正規化された絶対パスを返します。失敗したときにfalseを返します。
現在のディレクトリ内のフォルダーへの絶対パスを取得する基本的な例を次に示します。
$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のようなパスを介してサーバーに敏感なファイルにアクセスできません。