用了一段时间的 typecho 主题 VOID,发现确实存在很多的细节问题。比如说首页的分类,作者并没有做多级分类,导致我细分的子分类跟大分类一起展示,一直往下延伸,页面都装不下。首页分类的背景色在 scolltop 为 0 的时候默认为透明色,看起来不清楚。还有一点要吐槽的就是,不兼容大部分 typecho 的插件(“看板娘” 还能用)。

今天(2019-09-08)无意中点开主题作者的博客,发现他博客首页分类背景色变成黑色了。这是一个信号:主题更新了。赶紧跑到他的 github 上查看,确实更新了。Typecho Theme VOID 3.3.0 在 2019-09-13 发布了。下载了 zip 包,按照文档里说的,不禁用主题跟插件,直接覆盖。

主题更新没有问题,但更新后发现有篇文章不显示了,提示 Database Query Error.。折腾了一会儿发现规律,有评论的文章都报错。猜测可能是插件需要重新启动(因为插件的功能涉及到评论部分,有可能有数据库表、字段的更新)。重启插件,错误提示消失。

这款主题有一些功能我是比较好奇怎么实现的。比如文章点赞和文章阅读数统计。我博客是禁止注册的,所以除了我以外的其他人如果点赞、阅读文章,是需要做记录的(不能重复记录点赞数和阅读数)。但我查看数据库,并未发现有这样的记录表存在。猜测可能是通过文件缓存方式实现的。这点得检查源码才能知道。

总之,这是一款很棒的 typecho 主题,吾不如作者远矣!


费了九牛二虎之力,终于把新版的主题给替换上去了。

新主题叫是 VOID,作者叫熊猫小A,竟然是一个还未毕业的学生。想想我在学校的时候,还是连 PHP 是啥都不太清楚的混子。学校学的理论知识,与具体实践之间有一道深沟。到了大三、大四的时候,一头撞进创业的队伍。大部分实践都在学习 web 前端和 php 的基础知识。每门基础入门的知识都很简单,也很好上手。难度在于精。举例说明,前端的 html 标签语言都学了,所有的标签都用了一遍,然后真的去写页面的时候,还是抠抠索索,千难万难。最后还是用了 boostrap 这样的前端框架,之后就一直用框架的东西写页面。也是幸好做的 php 后端,要是做前端,估计连饭都吃不上。

在学习 php 的过程中,我喜欢上了一种东西,叫 “死磕”。大部分遇到的问题都能在百度结果页的第一页得到解决,但仍有少部分东西需要去推敲,琢磨,反复测试。从一开始不知道什么叫 debug 模式,到现在本地必备的 xdebug 扩展;从一开始开发环境只能下载 wamp、xampp 等集成包,到现在服务器上都是 yum 指令安装或者直接下载编译...不再害怕碰到新的问题,害怕的是没有问题,这样就没有收获,没有进步。个人博客也成为了一种积累经验,增长知识的方式。但这位作者的作品让我觉得羞愧,同样是做 php 的,人家都能发布自己作品了。我工作到现在,似乎没有把开发的项目做为一件作品去打磨。大多项目周期都在 1-2 个月,之后就说 byebye。也没有自己不断积累,慢慢成熟起来的体系。接触过的框架,第三方库和当时迸发的灵感都留在了那个项目中,之后又是新的项目,周而复始。有点羡慕,有点嫉妒。假如我每天能够少看点电视,多读些书,多学习一些东西,可能现在就不会为了混口饭吃,而庸庸碌碌了。

扯远了,熊猫小 A 的这个主题整体看起来比原来的好很多,以图片展示为主要的显示形式,顶部导航加下面的背景图,整体看起来上了一个层次。还有文章详情部分,居中,字体清晰,美观。右下角的工具栏还可以切换主题的背景色,字体大小等等。当然也有些问题,比如之前的文章分类是多级的,现在全都放到了一起。但整体都非常满意,恰如作者说的,降低个人博客的写作难度,提升个人博客写作的快感。

再谈一下安装过程。因为是新主题,我按照步骤把主题和插件下载然后启动,插件没有问题,主题部分启用之后,主题列表不见了,网站首页也打不开,直接报 500 的内部错误。没办法只好把整个 typecho 代码全都下载到本地进行调试,但放到本地之后,调试没有任何问题。本地环境 xampp(apache 2.4, php 7.3),线上环境(httpd 2.2,php 5.4),apache 低版本叫 httpd。所以最大的差别就是 php 版本了,猜测大概是主题里使用了在 php 5.4 之后的新特性,或者是 php 5.4 不兼容的写法。最直接的办法就是升级 php 了。5.4 版本是有点低了,现在一般用的是 5.6 或者 7.3。

之前总结过一篇 php 7.3.3 安装,那个是给客户安装的服务器环境的,总体走了一遍没有太大问题。这次是自己的服务器,阿里云 默认安装的环境,/alidata/server/php 就是 php 的安装目录(比我下载编译安装的目录里的内容少很多,猜测是编译前的文件和中间文件都被精简了)。

大致的流程是相同的,除了一些细节点。

下载 php

cd /alidata/server
wget http://cn2.php.net/get/php-7.3.5.tar.gz/from/this/mirror
tar -zxvf php-7.3.5.tar.gz
cd php-7.3.5

下载可能会有点慢,可以在早上或者晚上流量大的时候下载

安装目录

编译参数里 --prefix 可以自定义安装目录,默认安装目录为 /usr/local/php。这次为了统一,都放在 /alidata/server/php 下(目录下的 php 为软链,ln -s /alidata/server/php-7.3.5 /alidata/server/php)。

编译报错

configure: error: Please reinstall the libzip distribution

之前的方案是:

yum -y install libzip
yum -y install libzip-devel

但这次再编译还是报错,说 system libzip must be upgraded to version >= 0.11,yum 安装的版本低了,得下载新版本编译安装。

首先,卸载系统自带的 libzip

yum  -y remove libzip-devel

然后从官网下载并编译安装

wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
./configure
make && make install

如果是下载1.5.*以上版本,则需要采用如下安装方式

yum -y install cmake
wget https://libzip.org/download/libzip-1.5.1.tar.gz
tar -zxvf libzip-1.5.1.tar.gz
cd libzip-1.5.1
mkdir build
cd build
cmake ..
make && make install

Apache 的 libphp7.so 模块安装

因为 web 服务器 用的是 httpd(Apache),php7 在 Apache 中是以模块加载进来的。所以跟以往 nginx 不太一样,需要在编译的时候多加一项 --with-apxs2=/alidata/httpd/bin/apxs 。这样编译执行后,会自动把 生成的 libphp7.so 添加到 /alidata/server/httpd/modules 文件夹下,并且会在配置文件 /alidata/server/httpd/conf/httpd.conf 中自动加上一句 LoadModule php7_module modules/libphp7.so,需要手动将之前的 LoadModule php5_module modules/libphp5.so 注释掉(首部加 #)。

./configure --help 查看 configure 可使用的配置选项。

启动 php-fpm 报错

ERROR: [pool www] cannot get uid for user 'nginx'
ERROR: FPM initialization failed

这个错误产生的原因是编译参数里包含了 --with-fpm-user=nginx --with-fpm-group=nginx,直接修改 php-fpm 的配置文件即可。主要配置文件:/alidata/server/php/etc/php-fpm.conf。如果这里找不到 user、group 参数设置的位置,可能是在另外引入的文件中 /alidata/server/php/etc/php-fpm.d/www.conf 。将 user、group 修改成 pool 后面的 www 即可。

文章目录