PHP文件上传与在线编辑开发求助:自定义选择.txt文件
实现自定义文件选择、上传与编辑功能
嘿,我来帮你把固定读取文件的代码改成支持自定义选择、上传和编辑的版本!咱们一步步来实现:
1. 先做文件上传功能
首先需要一个HTML表单让用户上传.txt文件,再配合PHP处理上传逻辑:
<form method="POST" enctype="multipart/form-data"> <label>上传TXT文件:</label> <input type="file" name="txt_file" accept=".txt" required> <button type="submit" name="upload">上传文件</button> </form>
对应的PHP上传处理代码:
<?php // 上传目录(确保这个目录有写入权限,且配置合适的权限避免风险) $uploadDir = './uploads/'; // 确保上传目录存在 if (!file_exists($uploadDir)) { mkdir($uploadDir, 0755, true); } if (isset($_POST['upload']) && isset($_FILES['txt_file'])) { $file = $_FILES['txt_file']; // 验证文件类型 $fileType = pathinfo($file['name'], PATHINFO_EXTENSION); if ($fileType !== 'txt') { echo "<p>只能上传TXT文件!</p>"; exit; } // 生成安全的文件名(避免重名和路径遍历攻击) $safeFileName = basename($file['name']); $targetPath = $uploadDir . $safeFileName; // 移动上传文件到目标目录 if (move_uploaded_file($file['tmp_name'], $targetPath)) { echo "<p>文件上传成功!</p>"; } else { echo "<p>文件上传失败,请检查目录权限!</p>"; } } ?>
2. 添加自定义文件选择功能
接下来做一个下拉框,让用户选择已上传的TXT文件来读取或编辑:
<?php // 获取上传目录下的所有TXT文件 $files = glob($uploadDir . '*.txt'); $fileOptions = []; foreach ($files as $file) { $fileName = basename($file); $fileOptions[] = "<option value='$fileName'>$fileName</option>"; } ?> <form method="POST"> <label>选择要操作的文件:</label> <select name="selected_file" required> <?php echo implode('', $fileOptions); ?> </select> <button type="submit" name="view">查看文件</button> <button type="submit" name="edit">编辑文件</button> </form>
3. 动态读取与编辑文件
现在把你原来的读取代码改成动态的,根据用户选择的文件来读取,同时添加编辑保存功能:
<?php if (isset($_POST['view']) && isset($_POST['selected_file'])) { $selectedFile = $uploadDir . basename($_POST['selected_file']); if (file_exists($selectedFile)) { $myFile = fopen($selectedFile, 'r'); echo "<h3>文件内容:</h3>"; while (($buffer = fgets($myFile)) !== false) { // 转义内容防止XSS攻击 echo "<p>" . htmlspecialchars($buffer) . "</p>"; } fclose($myFile); } else { echo "<p>文件不存在!</p>"; } } if (isset($_POST['edit']) && isset($_POST['selected_file'])) { $selectedFile = $uploadDir . basename($_POST['selected_file']); if (file_exists($selectedFile)) { $fileContent = file_get_contents($selectedFile); // 显示编辑表单 echo "<form method='POST'> <input type='hidden' name='edit_file' value='" . basename($_POST['selected_file']) . "'> <label>编辑文件内容:</label><br> <textarea name='file_content' rows='15' cols='80'>" . htmlspecialchars($fileContent) . "</textarea><br> <button type='submit' name='save'>保存修改</button> </form>"; } else { echo "<p>文件不存在!</p>"; } } // 保存编辑内容 if (isset($_POST['save']) && isset($_POST['edit_file']) && isset($_POST['file_content'])) { $editFile = $uploadDir . basename($_POST['edit_file']); if (file_exists($editFile)) { if (file_put_contents($editFile, $_POST['file_content'])) { echo "<p>文件修改保存成功!</p>"; } else { echo "<p>保存失败,请检查目录权限!</p>"; } } else { echo "<p>文件不存在!</p>"; } } ?>
重要安全提醒
- 一定要用
basename()处理文件名,防止路径遍历攻击(比如用户输入../恶意文件.txt) - 严格限制只能上传和操作.txt文件,避免执行恶意脚本
- 确保上传目录的权限设置正确(建议0755,不要给执行权限)
- 用
htmlspecialchars()转义输出的内容,防止XSS攻击
把这些代码整合到一个PHP页面里,就能实现完整的“上传TXT文件→选择文件→查看/编辑→保存修改”的流程啦!
内容的提问来源于stack exchange,提问作者user8773403
相关产品推荐
相关产品推荐

