dir.php 是前端進入點,負責讀取指定目錄、產生檔案/資料夾圖示 HTML、輸出工具列、新建資料夾佔位區塊。以下逐段解析關鍵函式。
$dir_path = isset($_GET['url']) ? $_GET['url'] : '..';
$lastdir = substr($dir_path, 0, strlen($dir_path) - strlen(substr($dir_path, strrpos($dir_path, "/"))));
取得上層目錄路徑供「返回上級」按鈕使用。
Tool()產生固定按鈕:根目錄、上一頁、下一頁、上層目錄、新建文字檔、新建資料夾、貼上、上傳。按鈕透過 onclick 呼叫 js.js 中的對應函式。
CheckDir()function CheckDir($dir_path) {
if (is_dir($dir_path) && $dir_file = opendir($dir_path)) {
while (($dir_list = readdir($dir_file)) !== false) {
if ($dir_list != "." && $dir_list != "..") {
echo "<div class='folder' oncontextmenu=\"return myMenuShow(this,'$dir_path/$dir_list','$dir_path/')\" id='$dir_path/$dir_list'>
<a href='?url=$dir_path/$dir_list'><img src='" . Getfiletype($dir_list) . "' border=0 onload=\"resizepic(this);\" /></a>
<p id='$dir_list' onClick=\"edit(this,'$dir_path/$dir_list');\">$dir_list</p>
</div>\n";
}
}
closedir($dir_file);
}
Folderexp($dir_path); // 輸出新建資料夾區塊
}
. 與 .. 避免無限遞迴。oncontextmenu 呼叫 document.js 的 myMenuShow 顯示右鍵選單。onclick 綁定 edit() 啟用重命名編輯模式。onload 呼叫 resizepic() 自動縮放至 56px 內。Getfiletype() / Getextends()fold.jpg。php/asp/jsp/aspx/xml 共用 asp_php_jsp.jpg;htm/html/shtml/js 共用 html_js.jpg;txt、doc 各有專屬圖示;其餘預設資料夾圖示。Folderexp()輸出一個隱藏的 <div id="t">,內含輸入框,失焦時呼叫 Losefocus() 送出 AJAX 建立資料夾請求。
程式直接使用 $_GET['url'] 拼接路徑,未做路徑遍歷防禦(如 ../../etc/passwd)。實務上必須以 realpath() 限制在允許根目錄下,並過濾 ..。