You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:18:02