从 Z-BlogASP 到 Z-BlogPHP:一次老博客升级迁移记录
很多早年搭建的个人博客,都会遇到同一个问题:程序还能跑,文章也都在,但后台、主题、插件和服务器环境已经明显跟不上了。我的这个站点就是一个典型例子,原来使用的是 Z-BlogASP 老版本,数据放在 Access 数据库里,没有 MySQL,运行环境也比较旧。
这次升级的目标不是“换一个全新网站”,而是在尽量保留原有内容、链接、图片和分类结构的基础上,把旧站迁移到更容易维护的 Z-BlogPHP。
一、为什么不继续使用 ASP 版本
旧站原来是 Z-BlogASP,优点是轻量,Access 数据库也不需要额外的数据库服务。但随着时间推移,问题越来越明显:
ASP 生态已经比较老,主题和插件可选范围很少。
现在官方主要维护的是 PHP 版本。
新主题、新编辑器、应用中心,大多围绕 Z-BlogPHP。
云主机继续支持 ASP 的空间越来越少,兼容性问题也更多。
老主题在现代浏览器和移动端体验不够好。
所以从长期维护角度看,继续留在 ASP 版本只是“还能用”,但不太适合继续折腾和扩展。
二、先确认云主机环境
迁移之前,最重要的是确认云主机能不能跑 Z-BlogPHP。因为这个云主机没有 MySQL,只能优先考虑 SQLite。
检查结果是:
PHP:7.1.22
系统:Windows / IIS
SQLite3:支持
PDO SQLite:支持
目录写入:支持
这就意味着可以使用 Z-BlogPHP + SQLite 的组合,不需要马上迁到 MySQL。
这里要注意一点:Z-BlogPHP 新版本对 PHP 版本有要求。如果云主机只有 PHP 7.1,就不能盲目使用最新版本。最终选择的是:
Z-BlogPHP 1.7.4.3430 数据库:SQLite PHP:7.1
这个组合和当前云主机环境比较匹配。
三、本地先演练,不直接动线上站
老站数据比较多,直接在线上操作风险很大。因此先在 Win11 本地搭建测试环境:
D:\phpstudy_pro\WWW\zblogphp
本地访问地址:
http://127.0.0.1:8094/zblogphp/
先在本地安装 Z-BlogPHP 1.7.4,并使用 SQLite 数据库。确认后台、首页、文章页、分类页都能打开后,再开始迁移旧数据。
这种方式有一个好处:线上站点不受影响,所有导入、替换、修复、主题调整都可以先在本地验证。
四、导出旧 ASP 数据
旧站的数据在 Access 数据库中,主要包括:
分类
标签
用户
文章
评论
先写 ASP 导出脚本,把旧数据库内容导出成 JSON。导出的数据量大致为:
分类:5 标签:218 用户:2 文章:681 评论:480
导出时还遇到一个常见问题:老 ASP 站大多是 GBK/GB2312 编码,而 PHP 新站使用 UTF-8。为了避免乱码,导出 JSON 时需要正确处理中文编码。
五、导入到 Z-BlogPHP SQLite
导入时没有简单粗暴地覆盖 Z-BlogPHP 的所有数据,而是采用了更稳的方式:
保留 PHP 新站当前 admin 登录账号
导入旧站文章、分类、标签、评论
旧文章作者先映射,后续再恢复原作者显示
评论中找不到对应文章的孤儿评论跳过
最终导入结果:
文章:681 分类:5 标签:218 成功导入评论:146 跳过孤儿评论:334
跳过的评论多半是旧留言本、垃圾评论或已经没有对应文章的历史数据。
六、附件和图片路径处理
老文章里有很多图片路径,例如:
upload/ UPLOAD/ IMAGE/ ../../../upload/
这些路径在 PHP 新站里不能直接用,所以把旧站附件目录复制到:
zb_users/upload/legacy-upload zb_users/upload/legacy-image
然后批量替换文章正文里的旧路径,让图片指向新的附件目录。
迁移后还要抽样访问旧图片链接,确认图片能正常显示。这个步骤很重要,因为文章能打开不代表旧图片都能打开。
七、分页、分类、归档和缓存
数据导入后,首页一开始出现过分页不正常、分类和归档模块不显示的问题。
原因是 Z-BlogPHP 有自己的缓存和统计模块。直接写数据库以后,缓存里的文章总数、分类统计、归档统计并不会自动刷新。
解决方式是:
修复文章数量缓存
重建侧栏模块
重建模板缓存
清理旧 compiled 模板文件
修复后首页分页、分类、归档才恢复正常。
八、主题升级与调整
旧 ASP 主题已经比较老,所以 PHP 版本换用了 tpure 主题。后续又更新到了较新的 tpure 版本。
主题调整包括:
替换 logo
生成 favicon
隐藏首页幻灯片
隐藏友情链接
隐藏前台登录/注册入口
去掉页脚外链
恢复旧文章原作者显示
其中有一个小坑:主题升级后,部分主题配置会恢复默认值,例如幻灯片、友情链接、登录入口可能重新出现。因此主题升级后要重新检查这些设置。
九、云主机部署
本地测试完成后,把 PHP 站点整体打包上传到云主机根目录。
云主机根目录最终应该直接包含:
index.php feed.php search.php zb_system/ zb_users/
不要多套一层目录,例如:
wwwroot/zblogphp-cloud-xxx/index.php
如果部署到根目录,站点地址应该是:
https://www.webgou.info/
而不是本地测试地址:
http://127.0.0.1:8094/zblogphp/
也不是:
https://www.webgou.info/zblogphp/
十、线上遇到的几个问题
1. PHP 版本绑定不一致
一开始云上脚本报:
Use of undefined constant __DIR__
这通常说明当前站点实际跑的 PHP 版本过低,后来切换到 PHP 7.1 后恢复正常。
2. HTTPS 识别问题
数据库里已经设置为:
https://www.webgou.info/
但程序运行时识别成:
http://www.webgou.info/
这是 Windows + IIS + CGI/FastCGI 下比较常见的问题,PHP 不一定能正确知道当前请求是 HTTPS。解决方式是强制固定站点域名,并关闭额外 Referer 校验。
3. 模板编译文件不存在
线上曾出现:
主题模板的编译文件不存在 lost_file: zb_users/cache/compiled/tpure/index.php
这是因为模板缓存被清理后,没有成功重新生成。解决方式是在线上重新编译模板,或者确保 zb_users/cache/compiled 可写。
十一、为什么暂时不迁 MySQL
云主机虽然送了 50MB MySQL,但当前文章和附件规模下,SQLite 已经够用。
而且 SQLite 有几个优点:
不需要单独创建数据库
备份就是复制一个
.db文件对个人博客访问量来说性能足够
迁移过程更简单
如果以后访问量变大,或者需要更复杂的数据管理,再考虑迁移到 MySQL 也不迟。
十二、迁移经验总结
这次迁移最大的体会是:老站升级不要急着在线上直接替换。
比较稳的流程应该是:
备份旧站文件和数据库。
本地搭建新版本测试环境。
导出旧站数据。
导入到新站数据库。
处理图片和附件路径。
重建缓存、模板和模块。
本地完整测试首页、文章页、分页、分类、归档。
再上传云主机。
云上修正站点地址和权限。
删除所有临时诊断、修复脚本。
对于这种十几年历史的老博客来说,升级不是简单地“覆盖新版程序”,而是一次内容、环境、编码、路径、主题、缓存的系统迁移。
好在最终结果是值得的:旧文章保留下来了,图片也能访问,后台变得更现代,后续主题和插件也有了更多选择。老博客不用推倒重来,也可以继续往前走。