如何使用Javascript在Apache服务器上删除Excel文件?现有代码运行无效
原有代码问题梳理
- 前端AJAX的
data参数格式错误:没有指定键名,后端$_GET['file']无法获取到传入的文件路径 - 直接传完整URL给
unlink无效:unlink只能操作服务器本地文件系统路径,无法识别HTTP/HTTPS协议的URL - 安全风险极高:没有做任何权限校验、路径白名单校验,恶意用户可传入任意路径删除服务器上的任意文件
- 无返回值处理:后端执行完删除后没有返回
deleted标识,前端成功回调的判断逻辑无法触发 - 用GET请求做删除操作不符合规范:GET请求原则上是幂等的,删除属于写操作,用POST请求更合适
修复后代码
前端JS代码
var r = confirm("Are you sure you want to delete this File?") if(r == true) { $.ajax({ url:'delete.php', // 明确指定键名file,传文件相对于服务器根目录的路径即可,无需传完整URL data: {file: '/server/index.xlsx'}, method:'POST', success:function(response){ if (response === 'deleted') { alert('Deleted !!'); } else if (response === 'error') { alert('Delete failed, please check file permissions or path'); } } }); }
后端delete.php代码
<?php // 配置允许删除的文件白名单,必须提前把允许删除的文件路径加入列表 $allowDeleteFiles = [ '/server/index.xlsx', // 其他允许删除的文件路径可继续添加 ]; // 配置服务器项目根目录,可根据自己的实际部署情况修改 $rootPath = $_SERVER['DOCUMENT_ROOT']; // 获取传入的文件路径 $filePath = $_POST['file'] ?? ''; // 校验路径是否在白名单内,防止任意文件删除风险 if (!in_array($filePath, $allowDeleteFiles)) { echo 'error'; exit; } // 拼接完整的本地文件路径 $fullPath = $rootPath . $filePath; // 校验文件是否真实存在 if (!file_exists($fullPath)) { echo 'error'; exit; } // 校验目标是文件而非目录,防止误删目录 if (!is_file($fullPath)) { echo 'error'; exit; } // 执行删除操作 if (unlink($fullPath)) { echo 'deleted'; } else { echo 'error'; } ?>
额外注意事项
- 确保Apache运行用户对需要删除的Excel文件有写入/删除权限,否则
unlink会执行失败 - 如果允许删除的文件较多,可以把白名单存在数据库或者独立配置文件中,无需硬编码在逻辑中
- 如需身份校验,可以在delete.php中增加登录态校验逻辑,确保只有有权限的用户才能执行删除操作
内容的提问来源于stack exchange,提问作者User1738
相关产品推荐
相关产品推荐

