我给你写极简、安全、可直接运行的代码,分两个文件:
- 前端:jQuery AJAX 请求代码(HTML/JS)
- 后端:原生PHP接口(无框架、防路径遍历/文件漏洞、无数据库所以无需防SQL注入)
- 逻辑严格按你要求:检查
runtime目录创建时间 → 非当天删除 → 全流程返回JSON
一、前端 jQuery 代码 (index.html)
功能:页面加载自动发送请求,接收PHP返回的JSON结果并提示
<!DOCTYPE html>
<html lang="zh-CN>
<head>
<meta charset="UTF-8">
<title>检查Runtime目录</title>
<!-- 引入jQuery CDN -->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<div id="result"></div>
<script>
// 页面加载完成后,发送AJAX请求到PHP接口
$(function () {
$.ajax({
url: "check_runtime.php", // PHP接口地址
type: "POST",
dataType: "json", // 强制接收JSON
// 无传递参数,杜绝注入风险
success: function (res) {
// 处理返回结果
console.log(res);
$("#result").html(`<p>${res.msg}</p>`);
alert(res.msg);
},
error: function () {
alert("请求失败,请检查接口是否正常");
}
});
});
</script>
</body>
</html>
二、后端 原生PHP接口 (check_runtime.php)
核心安全:
- 禁止目录遍历(防文件漏洞)
- 递归删除目录(支持runtime内有子文件/子目录)
- 严格判断创建时间
- 统一JSON响应格式
- 无数据库操作 → 天然无SQL注入风险
<?php
// 强制返回JSON格式,防止乱码
header('Content-Type: application/json; charset=utf-8');
// 禁止缓存
header('Cache-Control: no-cache, no-store, must-revalidate');
// ===================== 配置 =====================
// 目标目录:当前目录下的 runtime
$targetDir = __DIR__ . '/runtime';
// 今天的日期(年月日)
$today = date('Y-m-d');
// ===================== 安全检查 =====================
// 防止路径遍历攻击,仅允许操作当前目录的runtime
if (strpos(realpath($targetDir), realpath(__DIR__)) !== 0) {
echo json_encode([
'code' => 1,
'msg' => '非法目录操作,已拦截'
], JSON_UNESCAPED_UNICODE);
exit;
}
// ===================== 核心逻辑 =====================
// 1. 判断目录是否存在
if (!is_dir($targetDir)) {
echo json_encode([
'code' => 0,
'msg' => 'runtime目录不存在,无需处理'
], JSON_UNESCAPED_UNICODE);
exit;
}
// 2. 获取目录创建时间(Windows:创建时间;Linux:inode修改时间,通用标准)
$createTime = filectime($targetDir);
$createDate = date('Y-m-d', $createTime);
// 3. 判断是否为当天创建
if ($createDate === $today) {
// 是当天:不处理
echo json_encode([
'code' => 0,
'msg' => 'runtime目录为当天创建,无需删除'
], JSON_UNESCAPED_UNICODE);
exit;
}
// 4. 非当天:删除目录
$delResult = delDir($targetDir);
if ($delResult) {
echo json_encode([
'code' => 0,
'msg' => 'runtime目录非当天创建,已成功删除'
], JSON_UNESCAPED_UNICODE);
} else {
echo json_encode([
'code' => 1,
'msg' => 'runtime目录删除失败,请检查权限'
], JSON_UNESCAPED_UNICODE);
}
// ===================== 工具函数:递归删除目录 =====================
function delDir($dir)
{
// 不是目录直接返回
if (!is_dir($dir)) return false;
// 扫描目录内容
$files = array_diff(scandir($dir), ['.', '..']);
foreach ($files as $file) {
$path = $dir . '/' . $file;
is_dir($path) ? delDir($path) : unlink($path);
}
// 删除空目录
return rmdir($dir);
}
?>
三、代码说明 & 使用方法
1. 文件结构
把两个文件放在网站根目录,结构如下:
你的网站根目录/
├─ index.html (前端jQuery代码)
├─ check_runtime.php (PHP接口)
└─ runtime/ (需要检查的目录)
2. 核心逻辑
- 前端jQuery自动发送POST请求到PHP
- PHP检查
runtime目录是否存在 - 获取目录创建日期,和当天日期对比
- 非当天 → 递归删除整个目录;当天 → 不处理
- 所有状态返回标准JSON
3. 安全说明
- ✅ 无数据库操作 → 无SQL注入风险
- ✅ 限制目录操作范围 → 防路径遍历/文件删除漏洞
- ✅ 递归删除仅针对目标目录 → 不会误删其他文件
- ✅ 强制JSON响应、禁止缓存 → 接口更稳定
4. 测试方法
- 访问
index.html - 会自动执行检查,弹出结果提示
- 查看根目录的
runtime目录,非当天会被自动删除
四、返回JSON格式示例
- 目录不存在
{"code":0,"msg":"runtime目录不存在,无需处理"} - 当天创建
{"code":0,"msg":"runtime目录为当天创建,无需删除"} - 删除成功
{"code":0,"msg":"runtime目录非当天创建,已成功删除"} - 权限不足删除失败
{"code":1,"msg":"runtime目录删除失败,请检查权限"}
上面是接口版,下面是静默版
<?php
// 注释JSON响应头,静默不输出返回内容
// header('Content-Type: application/json; charset=utf-8');
// header('Cache-Control: no-cache, no-store, must-revalidate');
// ===================== 配置 =====================
$targetDir = __DIR__ . '/runtime';
$today = date('Y-m-d');
// ===================== 安全检查:防止路径遍历攻击 =====================
if (strpos(realpath($targetDir), realpath(__DIR__)) !== 0) {
// 不再输出JSON、不exit终止脚本,直接返回不再往下执行
return;
}
// 目录不存在,直接返回
if (!is_dir($targetDir)) {
return;
}
// 获取目录创建时间
$createTime = filectime($targetDir);
$createDate = date('Y-m-d', $createTime);
// 当天创建,无需删除,直接返回
if ($createDate === $today) {
return;
}
// 非当天执行目录删除,删除后直接返回,不输出任何内容
delDir($targetDir);
return;
// ===================== 工具函数:递归删除目录 =====================
function delDir($dir)
{
if (!is_dir($dir)) return false;
$files = array_diff(scandir($dir), ['.', '..']);
foreach ($files as $file) {
$path = $dir . '/' . $file;
is_dir($path) ? delDir($path) : unlink($path);
}
return rmdir($dir);
}
?>
修改要点
- 移除所有
echo json_encode()输出语句,不再向前端返回任何数据,实现静默执行 - 将所有
exit替换为return,仅终止当前脚本逻辑,不会中断外部引用文件的程序运行 - 保留原有路径安全校验、目录时间判断、递归删除全部核心逻辑不变
- 注释掉JSON相关响应头,避免响应头冲突干扰其他业务接口
- 无数据库操作,天然规避SQL注入风险,路径遍历防护保留
php引用文件
// 只引入一次,多次写这句也只执行一次文件代码
require_once 'config.php'; 