代码修复: - web/agent/agent.py: datetime.utcnow() → datetime.now(timezone.utc) - requirements.txt: 移除 paramiko==3.5.0 (已无活跃引用) - 删除 server/infrastructure/ssh/pool.py (DEPRECATED, 无引用) 连接池三层对齐 (config.py/.env.example/session.py): - DB_POOL_SIZE 100→160, DB_MAX_OVERFLOW 100→120 - 基于 MySQL max_connections=400, install.php 公式 文档修复 (21项): - P0: 硬编码域名/IP替换为配置变量占位符 - P1: 10个过时设计文档加归档标注 (引用旧文件结构) - P2: step-3-webssh报告 paramiko引用修正 - 6份审查报告连接池参数勘误 100/100→160/120 - ECC安全报告 EC5 datetime.utcnow 标记已修复 - docs/README.md 文档索引重写 - docs/memory/mem_nexus_overview.md 移除硬编码凭证 - docs/project/tech-stack-inventory.md paramiko标记已移除 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.9 KiB
files.php 迭代 — 代码审查跟进项
⚠️ 已归档 — 2026-05-22 本文档审查的 PHP 文件 (api_proxy.php, files.php, webfm.php) 已被 Tailwind CSS v4 + Alpine.js 前端替代。 相关功能已迁移到: web/app/files.html + server/api/sync_v2.py 保留本文档供历史参考。
审查日期: 2026-05-19
审查范围: web/api_proxy.php, web/files.php
审查结论: 零 [必须修复] 项,可合入主干
建议修改 (4 项) — 下次迭代顺手改
#1 api_proxy.php 重复鉴权加注释
位置: web/api_proxy.php:22
当前代码:
// Auth check: return 401 JSON for unauthenticated API requests
if (empty($_SESSION['logged_in'])) {
改动: 加一行说明这是兜底检查(auth.php 已处理主路径)
// 兜底:auth.php 已校验 AJAX 请求,此处防止 auth.php 未拦截的边缘情况
if (empty($_SESSION['logged_in'])) {
工时: 1min
#2 删除未使用的 fm.uploadRaw
位置: web/files.php:208-210
当前代码:
fm.uploadRaw=function(action,fd){
return fetch(API+'?action='+action,{method:'POST',headers:{'X-Requested-With':'XMLHttpRequest'},body:fd});
};
改动: 删除这 3 行。上传已用 XHR 直接处理,此函数未被任何代码调用。
工时: 1min
#3 toast 元素残留清理
位置: web/files.php:213-214 (fm.load 函数开头)
问题: 用户在上传完成前离开页面(点面包屑导航等),上传 toast 不会自动移除。
改动: 在 fm.load 开头加一行清理:
fm.load=async function(path){
// 清理残留的上传 toast
document.querySelectorAll('div[style*="z-index:9999"]').forEach(function(el){el.remove();});
state.path=path||state.path;
// ...
工时: 5min
#4 ACE 本地化
位置: web/files.php:189
原方案: CDN 引入 cdnjs
决策: 改为本地文件 web/ace/ace.js (444KB),不依赖外部 CDN
状态: ✅ 已实施
附带好处: CDN fallback 提示无需再做(本地文件始终可用)
仅供参考 (2 项) — 不改也行
#5 done 闭包变量加注释
位置: web/files.php:363
说明: done 在单线程事件循环中不会有竞态,但要让维护者明白。加一行注释即可:
let total=files.length, done=0, errors=[];
// done 在所有 XHR 回调中共享,JS 单线程保证无竞态
#6 CORS origin 精确匹配
位置: web/api_proxy.php:13
说明: strpos($origin, $serverHost) 在子域名场景可能误判。当前影响极低(同源策略 + 鉴权已有保护),如有跨子域需求时再改用 parse_url 精确比较。
待确认 (1 项) — 已决策
#7 restart_nexus 端点 — ✅ 保留
位置: web/api_proxy.php:227-229
决策人: 用户 — 2026-05-19
决策: 保留(已恢复)
依据: 运维管理后台场景下,Web 重启是合理需求;鉴权已到位
WebFM 集成审查 (2026-05-19)
#8 未登录 <meta refresh> → PHP header — [必须修复]
位置: web/webfm.php:1076
建议: PHP header 跳转,避免加载整个 <head> 后再跳转
#9 safePath 标准已确立 — ✅
结论: api_proxy.php 的做法是对的——不存在时返回原始路径 $p,父目录 realpath 兜底。已写入设计标准 §4。
#10 logout 跳转 login.php — [建议修改]
位置: web/webfm.php:357
现状: session_destroy() 后跳回 $self (webfm.php),多跳一次才到 login.php
执行计划
| 项 | 类型 | 工时 | 执行 |
|---|---|---|---|
| #1-#4 | 下次迭代一并改 | 12min | 工程部 |
| #8 | 改 meta→header | 1min | 工程部 |
| #10 | logout 跳转 | 1min | 工程部 |
| #5-#6 | 不改也能合 | — | — |
| #7 | 等产品决策 | — | 产品部 |