当前位置:首页 > 编程开发

从 Z-BlogASP 到 Z-BlogPHP:一次老博客升级迁移记录

很多早年搭建的个人博客,都会遇到同一个问题:程序还能跑,文章也都在,但后台、主题、插件和服务器环境已经明显跟不上了。我的这个站点就是一个典型例子,原来使用的是 Z-BlogASP 老版本,数据放在 Access 数据库里,没有 MySQL,运行环境也比较旧。

这次升级的目标不是“换一个全新网站”,而是在尽量保留原有内容、链接、图片和分类结构的基础上,把旧站迁移到更容易维护的 Z-BlogPHP。

一、为什么不继续使用 ASP 版本

旧站原来是 Z-BlogASP,优点是轻量,Access 数据库也不需要额外的数据库服务。但随着时间推移,问题越来越明显:

  1. ASP 生态已经比较老,主题和插件可选范围很少。

  2. 现在官方主要维护的是 PHP 版本。

  3. 新主题、新编辑器、应用中心,大多围绕 Z-BlogPHP。

  4. 云主机继续支持 ASP 的空间越来越少,兼容性问题也更多。

  5. 老主题在现代浏览器和移动端体验不够好。

所以从长期维护角度看,继续留在 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 也不迟。

十二、迁移经验总结

这次迁移最大的体会是:老站升级不要急着在线上直接替换。

比较稳的流程应该是:

  1. 备份旧站文件和数据库。

  2. 本地搭建新版本测试环境。

  3. 导出旧站数据。

  4. 导入到新站数据库。

  5. 处理图片和附件路径。

  6. 重建缓存、模板和模块。

  7. 本地完整测试首页、文章页、分页、分类、归档。

  8. 再上传云主机。

  9. 云上修正站点地址和权限。

  10. 删除所有临时诊断、修复脚本。

对于这种十几年历史的老博客来说,升级不是简单地“覆盖新版程序”,而是一次内容、环境、编码、路径、主题、缓存的系统迁移。

好在最终结果是值得的:旧文章保留下来了,图片也能访问,后台变得更现代,后续主题和插件也有了更多选择。老博客不用推倒重来,也可以继续往前走。


扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=697

分享给朋友:

“从 Z-BlogASP 到 Z-BlogPHP:一次老博客升级迁移记录” 的相关文章

WinCE下直接启动自己应用程序的方法

WinCE下直接启动自己应用程序的方法    其实让一个程序在wince里启动和windows里差不多,直接设置其为启动项,这个有几个方法。一个就是制作一个快捷方式,指向我们的应用程序如app.exe,然后将快捷方式放到\windows\startup下面。 ...…

wince去掉串口0的DEBUG模式,改为普通模式

 l 目前wince的串口0是作为调试串口用的,…

TD终端寻呼过程详解

网络侧要对一个手机进行寻呼,比如典型的,寻呼处于IDLE状态的UE建立CS呼叫连接,则网络侧要对PCH传输信道(其映射到SCCPCH物理信道)和PICH物理信道进行配置和内容填充。对PCH来说,就是要填充合适的Paging Type 1消息发送出去;而对于PICH来说,则要配置好Paging Occ…

Shader 进度条/技能CD特效

用了几天弄明白了这个简单的进度条,不容易。主要是利用了三角函数反正切函数特性,在夹角范围内的值透明度设为0,不在范围内值设成1.对于shader 编辑器,可以用forge 以及amplify.贴上测试代码:// Made with Amplify Shader Editor// Available…

Android SQLite数据库应用技巧分享

Android操作系统中内置了SQLite数据库!我们在应用程序开发中都需要对数据库进行相关操作。在这里大家就一起来看看有关Android SQLite数据库的应用技巧,方便将来的应用。SQLite本身就是一个很小型的数据库!数据库存储的位置在data/data/<项目文件夹>/data…

wince 串口驱动分析

通常在串口控制器上会有两个FIFO用作接收和发送的缓冲,至少在我所接触的几款CPU是这样的。当接收到数据后会直接将接收到的数据置入该缓冲器,并同 时由控制电路向本地总线发出通知,以便让本地总线将缓冲器内的数据读走,这样在响应(等待和读取)的过程中仍然能通过缓冲器来接收数据。而发送发送的过程 刚刚相反…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。