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

PHP 文件管理器實戰:遞歸遍歷、編輯、刪除、新建、重命名全功能單文件實現

     編輯:PHP 綜合知識

單文件 PHP 文件管理器:目錄遍歷、文件編輯、刪除、新建、重命名完整實現

一個 <?php ... ?> 即可部署的輕量級文件管理器,支援目錄樹導航、文件內容編輯 (代碼高亮建議前端 JS 實現)、刪除確認、新建文件/目錄、重命名。適合無 FTP/SSH 權限時的緊急文件操作。生產環境嚴禁直接部署,極高風險!

核心功能模塊

動作參數功能
默認-列表當前目錄,顯示類型、大小、操作鏈接
?folder=subdir相對路徑進入子目錄
?action=edit&type=file&path=...文件路徑讀取文件內容到 textarea 編輯
?action=edit&type=dir&path=...目錄路徑重命名目錄表單
?action=editsave&path=...POST textarea保存編輯內容
?action=del&type=file|dir&path=...路徑刪除文件/空目錄 (JS 確認)
?action=addfile&path=...目錄路徑新建文件/目錄表單 (含內容)
?action=filesavePOST filename, textarea創建文件 (含點) 或目錄 (無點)
?action=dir_renamePOST filename重命名目錄

關鍵代碼片段

1. 目錄遍歷與鏈接生成

$s = explode("\n", trim(`dir /b /o:gn $path`)); // Windows dir 命令獲取列表
foreach ($s as $value) {
    $full = $path . '\\' . $value;
    $isDir = is_dir($full);
    $link = $isDir ? "<a href='?folder=" . urlencode($relPath . '\\' . $value) . "'>$value</a>" : $value;
    echo "<tr><td>$link</td><td>" . ($isDir ? 'dir' : 'file') . "</td><td>" . round(filesize($full)/1024) . "kb</td>";
    echo "<td><a href='?action=edit&path=$full&type=" . ($isDir?'dir':'file') . "'>編輯</a> | ";
    echo "<a href='?action=del&path=$full&type=" . ($isDir?'dir':'file') . "' onclick=\"return confirm('確定刪除 $value')\">刪除</a></td></tr>";
}

2. 文件編輯與保存

// 讀取
$file = fopen($path, 'r');
while (!feof($file)) $content .= fgets($file, 9999);
fclose($file);
// 保存
$file = fopen($path, 'w');
fwrite($file, $_POST['textarea']);
fclose($file);

3. 安全關鍵點 (必須加固)

  1. 路徑遍歷防禦:$path = realpath($path); if (strpos($path, $ROOT) !== 0) die('Access denied');
  2. 身份驗證:if (!isset($_SERVER['PHP_AUTH_USER']) || !valid($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) { header('WWW-Authenticate: Basic realm="File Manager"'); header('HTTP/1.0 401 Unauthorized'); exit; }
  3. HTTPS 強制:防止明文傳輸密碼與文件內容。
  4. 操作日志:記錄 IP、用戶、動作、路徑、時間。
  5. 禁用危險擴展編輯:.php、.phtml、.htaccess 等建議只讀或禁止編輯。

完整部署建議

<?php
// 1. 配置區
$ROOT = realpath(__DIR__); // 限制根目錄
$AUTH_USER = 'admin';
$AUTH_PASS = password_hash('strong_password', PASSWORD_DEFAULT); // 預存哈希

// 2. 基礎驗證
if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] !== $AUTH_USER || !password_verify($_SERVER['PHP_AUTH_PW'], $AUTH_PASS)) {
    header('WWW-Authenticate: Basic realm="File Manager"');
    header('HTTP/1.0 401 Unauthorized');
    exit('Unauthorized');
}

// 3. 路徑安全
$reqPath = isset($_GET['path']) ? realpath($_GET['path']) : $ROOT;
if ($reqPath === false || strpos($reqPath, $ROOT) !== 0) exit('Invalid path');

// ... 後續業務邏輯使用 $reqPath
?>

現代化替代方案

  • FileBrowser (Go 編寫,單二進制,Web UI,支援 S3、資料庫掛載)
  • Tiny File Manager (PHP 單文件,功能更全、UI 現代、內置驗證、編輯器)
  • Net2FTP / Monsta FTP (Web FTP 客戶端)
  • VS Code Remote / SFTP (本地編輯器直連服務器,最推薦)

單文件管理器適合臨時救急,長期維護請用成熟工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved