首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 遞歸遍歷目錄實現文件瀏覽器(含 Base64 路徑傳遞)

     編輯:PHP 相關知識

PHP 遞歸遍歷目錄實現文件瀏覽器(含 Base64 路徑傳遞)

利用 opendir/readdir、chdir、getcwd 等目錄函數,結合 GET 參數 Base64 編碼傳遞絕對路徑,實現簡易的 Web 目錄瀏覽與進入功能。

核心代碼

<?php
if (isset($_GET['id'])) {
    $s = str_replace(' ', '+', $_GET['id']);
    $s = base64_decode($s);
    chdir($s);
}

$a = opendir('.');
while (false !== ($c = readdir($a))) {
    if (is_dir($c)) {
        if ($c === '.') {
            continue;
        } elseif ($c === '..') {
            $parent = substr(getcwd(), 0, strrpos(getcwd(), '\\'));
            $w = base64_encode($parent);
            echo "上一級 <a href='?id=$w'>打開</a><br/>";
        } else {
            $w = base64_encode(getcwd() . '\\' . $c);
            echo "$c <a href='?id=$w'>打開</a><br/>";
        }
    } else {
        echo "$c 不是目錄<br/>";
    }
}
?>

關鍵函數說明

函數用途
opendir()打開目錄句柄
readdir()讀取目錄條目(含 . 和 ..)
is_dir()判斷是否為目錄
chdir()改變當前工作目錄
getcwd()獲取當前工作目錄絕對路徑
base64_encode/decode路徑安全傳遞(含特殊字符)

改進建議(生產環境必須)

  1. 路徑遍歷防護:解碼後必須驗證路徑在允許根目錄內(realpath() + 前綴匹配),防止 ../../etc/passwd 攻擊。
  2. 編碼處理:Windows 路徑分隔符 \\、中文文件名編碼轉換(iconv/mb_convert_encoding)。
  3. 權限控制:隱藏系統敏感目錄,添加訪問認證授權。
  4. 現代替代:優先使用 RecursiveDirectoryIterator (SPL) 或 glob(),代碼更健壯簡潔。
  5. 輸出轉義:htmlspecialchars() 防 XSS。

SPL 現代寫法示例

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($root, FilesystemIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $file) {
    echo $file->getPathname() . '<br/>';
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved