下午三点多,微信响了。
「论坛标题后面那个 - Powered by Discuz! 能去掉吗?看着太乱。」客户说的。
我回了个「能」,心想也就十来分钟的事。再抬头,六点过了。中间模板炸过一次,缓存重建歪过两回,权限来回修了三轮,就为了去掉一个小尾巴。
论坛是 Discuz! X5,宝塔面板装的。标题后缀在 template/default/common/header_common.php 里,那文件全是拼接字符串。
第一版我图快,直接上 sed:
sed -i 's/ - Powered by Discuz!<\/title>/<\/title>/g' header_common.php这条其实没毛病,标题是干净了。坏在我贪心——想着顺手把 $navtitle 后面那个多余的 - 也抹掉,又追了两条 sed。DZ 模板里到处都是 <!--{if}--> ... <!--{/if}--> 这种注释块,sed 不认它们,一替换就把 <!--{/if}--> 啃掉半个尾巴,变成 <!--{/if}->。前端进去直接白屏。
翻日志,PHP 甩出来一条模板编译不过,大概是 syntax error 那一挂,具体死在哪行它也没说清,只给了个 data/template/ 下的编译缓存文件名。这种时候才反应过来,动 DZ 模板不能用 sed,得用 Python 按字节精确替换,一次只动一处:
content = open('header_common.php', 'rb').read()
content = content.replace(b'$navtitle - <!--{/if}-->', b'$navtitle<!--{/if}-->')
open('header_common.php', 'wb').write(content)改完白屏是好了。但我怕还有别的地方被那几条 sed 啃过,心里没底,决定干脆拿官方包整目录盖回去。服务器上正好有宝塔当初装的时候留下的 discuz_x5.zip,解包、对 md5、覆盖。
盖之前我「聪明」地备份了一下:
cp template/discuzx5/common/header_common.php /root/dz-title-backup/
cp template/default/common/header_common.php /root/dz-title-backup/
cp template/default/touch/common/header_common.php /root/dz-title-backup/三个 cp,目标目录是同一个,文件名压根没区分。后两条把第一条直接盖了。等我真的要往回恢复,才发现备份目录里只剩一份,默认模板和手机触屏模板被写成了同一个文件。就这么个破备份,还是我亲手做的。
后面就是慢慢磨。重新从 zip 里单独抠出那三个文件,一个个对回来,再覆盖。
覆盖完模板,前台样式还是旧的——data/cache/ 下那张 style 缓存还在。我把 style_*.css 删了,想着干脆自己写个 CLI 脚本重建,省得登后台。
脚本调用 updatecache('styles'),跑完看了眼生成的 CSS,字体那行 URL 不对劲:
src: url('https://bbs.7ehl.com/tmp/static/image/common/dzicon.woff2')路径里多了个 /tmp/。我先怀疑是哪里配错了域名,翻站点配置翻半天没找到。后来才想通:我那个 CLI 脚本是在 /tmp/ 目录下执行的,DZ 初始化 siteurl 的时候会把当前脚本路径拼进去,脚本在 /tmp/,siteurl 就变成了 https://bbs.7ehl.com/tmp/,所有静态资源全跟着带上了 /tmp/ 前缀。
这坑挺阴的,函数还是那个函数,web 环境跑和 CLI 跑出来不一样。最后还是老老实实登后台,工具 → 更新缓存 → 勾「更新 CSS 缓存」→ 提交,出来的才对。
再说权限。前面 rm 的、cp 的、CLI 脚本建的,属主一会儿 root 一会儿 www,乱得很。data/cache/ 被 root 占了以后,PHP-FPM 那个 www 用户写不进去,后台点更新缓存直接弹一句 Can not write to cache files。最后是把缓存目录整个 rm 掉,再回后台点一次重建,让 PHP 自己按 www 建回来才利索。
六点多收工,标题是干净了。客户大概以为我早就弄完了,中间白屏那阵我只好说「在调样式」——总不能说一个字符串把你站搞白屏了。就这么点活儿干进去两个多小时,说出来有点丢人。
DZ 这套模板机制是真烦。改模板别用 sed,用 Python bytes 替换,一次一处;备份文件名带上来源,别往一个目录里怼;更新 CSS 缓存走后台,别写 CLI 脚本,siteurl 会歪;还有 root 和 www 那点破事,收尾记得看一眼。都是弯路换来的。
——对了,现在同时盯着两百多台 VM,机器一多光是来回连就够烦的。我平时批量管机器用的是自家那个免费的 七亿批量远程管理工具,RDP 九宫格、SSH 终端、SFTP 都塞在一个窗口里,省得在好几个客户端之间切来切去。
评论