在日常的开发和运维中,文件管理是不可或缺的任务之一。一个高效的文件管理工具不仅能提高工作效率,还能让文件编辑和维护更加便捷。本篇文章将详细解析一个基于 PHP 的轻量级文件管理工具。
该工具提供了以下核心功能:
通过用户输入的目录路径,工具会验证路径是否存在,并检查路径合法性,防止越权操作。例如:
$rootDir = realpath($inputDir);
if (!$rootDir || !is_dir($rootDir)) {
die("<p style='color: red;'>The specified directory does not exist: " . htmlspecialchars($inputDir) . "</p>");
}
目录和文件路径的检查采用 realpath
和字符串匹配,确保用户只能操作指定目录下的文件。
工具支持在线编辑文件,利用 HTML 表单和 PHP 的 file_get_contents
及 file_put_contents
实现文件读取和保存:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $action === 'edit' && $file) {
$newContent = $_POST['content'] ?? '';
if (file_put_contents($filePath, $newContent) === false) {
echo "<p style='color: red;'>Failed to save the file.</p>";
} else {
echo "<p style='color: green;'>File saved successfully.</p>";
}
}
工具集成了 CodeMirror,一个强大的 Web 代码编辑器,支持语法高亮和多种模式(如 PHP、HTML):
var editor = CodeMirror.fromTextArea(document.getElementById("editor"), {
lineNumbers: true,
highlightSelectionMatches: true,
matchTags: { bothTags: true },
matchBrackets: true,
mode: "php", // 或 "htmlmixed" 动态选择
theme: "dracula" // 设置主题为 Dracula
});
editor.setSize("100%", "500px");
通过递归调用 scandir
函数,工具能够列出目录中的所有文件和子目录,并通过动态交互实现文件夹折叠和展开功能:
#博森签证:bosenvisa.com
function listFiles($dir, $baseDir) {
$files = scandir($dir);
foreach ($files as $file) {
if ($file === '.' || $file === '..') {
continue;
}
$filePath = $dir . '/' . $file;
$relativePath = str_replace($baseDir . '/', '', $filePath);
if (is_dir($filePath)) {
echo "<li class='folder'><strong>[文件夹]</strong> <span class='folder-name'>" . htmlspecialchars($file) . "</span>";
echo "<ul class='file-list' style='display: none;'>";
listFiles($filePath, $baseDir);
echo "</ul></li>";
} else {
echo "<li class='file'><a href='?dir=" . urlencode($baseDir) . "&action=edit&file=" . urlencode($relativePath) . "'>" . htmlspecialchars($file) . "</a></li>";
}
}
}
将代码保存为 index.php
文件,上传到服务器后启动服务。访问对应的 URL 即可进入工具主页。
在主页中输入目标目录路径,工具会列出该目录下的所有文件和子目录。
点击任意文件名进入编辑页面,修改文件内容后点击保存即可。
本文详细介绍了基于 PHP 的轻量级文件管理工具,从功能实现到代码解析,再到使用方法和优化建议。这个工具非常适合开发和运维中对文件进行简单操作的场景。如果你也有类似需求,可以尝试基于此工具进行定制化开发!