·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

更新缓存执行了那些操作?能否在Linux后台手动执行缓存更新?

90 2
发表于 2024-11-21 15:20:50 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
工具——更新缓存——数据缓存模板缓存DIY 模块分类缓存更新 CSS 缓存后台搜索索引缓
以上页面可以更新缓存
  有没方法可以不登录admin后台 执行更新缓存操作


通过shell终端执行 rm data/cache/* data/template/* data/threadcache/*
虽然能清楚缓存 ,但是犹豫没有自动生成js css等缓存文件导致页面无法正常显示
  只能在admin后台手动点缓存更新操作,
data/cache/目录下面才生成 js和css文件





有没有方法可以 不登录admin后台  可以在shell终端就执行缓存更新





或者告知admi后台 更新缓存具体执行了那些操作



我要说一句 收起回复

评论2

独家记忆Lv.8 发表于 2024-11-21 15:21:11 | 查看全部
想shell执行更新缓存的话 需要写个脚本了……

更新缓存 具体执行了 什么 你自己去追代码就好了……就算给你将了 还是要去追代码的
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-12 02:21:39 | 查看全部
在 Discuz! 系统中,**后台更新缓存**的核心操作可分为以下几个技术步骤(以 X3.4 版本为例):

---

### **一、后台更新缓存的核心逻辑**
1. **数据缓存重建**  
   调用 `updatecache()` 函数,触发 `source/function/function_cache.php` 中定义的 `build_cache_` 系列函数,例如:
  
  1. build_cache_setting();      // 系统全局配置
  2.    build_cache_forum();        // 版块结构
  3.    build_cache_usergroup();    // 用户组权限
  4.    build_cache_style();        // 样式信息
  5.    build_cache_albumcategory();// 相册分类
复制代码


2. **模板缓存清理与编译**  
   清空 `data/template/` 目录并重新编译模板文件(`.htm` → `.php`)。

3. **CSS/JS 文件生成**  
   通过 `source/function/function_admincp.php` 的 `updatecache_css()` 方法,动态合并 `static/css/` 下的模块文件,生成 `data/cache/style_*.css`。

4. **DIY 模块缓存更新**  
   重置 `data/diy/` 目录下的页面模块配置缓存。

5. **其他缓存处理**  
   包括搜索索引、分类信息缓存等,依据勾选的项目触发对应 `build_cache_` 函数。

---

### **二、通过 Shell 终端自动化执行**
#### **方法 1:模拟 HTTP 请求**
通过 `curl` 或 `wget` 模拟管理员点击「更新缓存」的请求(需已登录状态):
  1. # 获取 formhash(需提前登录并提取 Cookie)
  2. FORMHASH=$(grep -o 'formhash=[^"]*' /path/to/discuz/data/admin/session | cut -d= -f2)

  3. # 发送 POST 请求
  4. curl -b "Cookie头信息" -d "formhash=$FORMHASH&operation=cache&submit=yes" "http://域名/admin.php?action=tools&operation=cache"
复制代码


#### **方法 2:编写 PHP CLI 脚本**
创建 `cli_update_cache.php`,内容如下:
  1. <?php
  2. define('IN_DISCUZ', true);
  3. define('DISCUZ_ROOT', '/网站绝对路径/');

  4. require_once DISCUZ_ROOT.'/source/class/class_core.php';
  5. $discuz = C::app();
  6. $discuz->init_cron = false;
  7. $discuz->init_session = false;
  8. $discuz->init();

  9. // 模拟管理员权限
  10. C::t('common_admincp_session')->insert(array(
  11.     'uid' => 1,          // 管理员UID
  12.     'adminid' => 1,      // 管理员组ID
  13.     'panel' => 'tools',
  14.     'dateline' => TIMESTAMP,
  15. ), false, true);

  16. // 执行全量缓存更新
  17. @set_time_limit(0);
  18. loadcache('plugin');
  19. require_once libfile('function/cache');
  20. updatecache();

  21. // 强制生成 CSS/JS 缓存
  22. require_once libfile('function/admincp');
  23. updatecache_css();

  24. // 清理残留锁文件
  25. @unlink(DISCUZ_ROOT.'/data/update.lock');
  26. echo "Cache updated successfully.\n";
  27. ?>
复制代码


**执行命令:**
  1. php /path/to/cli_update_cache.php
复制代码


---

### **三、关键技术点说明**
1. **权限校验绕过**  
   通过直接插入 `common_admincp_session` 表记录模拟管理员会话,避免依赖 Cookie。

2. **CSS/JS 生成逻辑**  
   需手动调用 `updatecache_css()` 函数触发合并操作,否则仅删除文件不会自动重建。

3. **环境初始化**  
   必须正确加载 Discuz! 核心类库(`class_core.php`)并初始化应用上下文。

---

### **四、注意事项**
- **路径配置**:确保 `DISCUZ_ROOT` 指向实际的网站根目录。
- **安全防护**:若开启 IP 验证或异地登录保护,需在脚本中处理相关逻辑。
- **日志记录**:建议在脚本中添加 `runlog()` 记录执行情况。

此方案可完整复现后台点击「更新缓存」的全部操作,适合集成到自动化部署流程中。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.218.232.140,GMT+8, 2025-4-4 07:25 , Processed in 0.294221 second(s), 89 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表