安装环境检测不通过:PHP版本与扩展的“代沟”
报错现象:
安装杰奇时,环境检测页面出现红色叉号,提示“PHP版本低于5.6”或“缺少mysqli扩展”“openssl扩展未启用”,部分新服务器直接白屏,连检测页面都刷不出来。
原因分析:
杰奇CMS最后稳定版(如1.7、2.3)基于PHP 5.x开发,对PHP 7.4+的语法兼容性极差,尤其mysql_*函数被移除后,老代码直接崩溃,而新服务器默认安装PHP 8.0/8.1,且未开启老式扩展。
解决步骤:
老兵不死,只能凋零?杰奇CMS停更后的七大绝症自救手册
- 登录宝塔或LNMP面板,找到站点设置,将PHP版本切换为 PHP 5.6(务必选5.6,不要选7.x)。
- 在PHP配置中开启
mysqli、curl、openssl、gd、mbstring扩展。 - 若面板没有PHP 5.6,需自行编译或使用Docker镜像(推荐
php:5.6-apache容器挂载源码)。 - 修改
php.ini中disable_functions,移除proc_open、exec等禁止项(杰奇采集要用)。 - 重启PHP-FPM后重新执行安装检测。
后台登录异常:验证码过期与SESSION冲突
报错现象:
输入正确账号密码,点击登录后一直转圈,或提示“验证码错误”但验证码明明正确,部分情况是登录成功后跳转回登录页,形成死循环。
原因分析:
杰奇老版本使用session_start()默认文件存储,但服务器时间不同步导致SESSION文件过期;若开启多个PHP版本,SESSION目录权限不一致,导致无法写入验证码值。
解决步骤:
- 检查服务器时间:执行
date -s "2025-03-01 12:00:00"强制校准,并同步时间源。 - 在
config.php中设置session_save_path为绝对路径(如/tmp/jieqi_sess),并chmod -R 777该目录。 - 修改后台登录文件
admin/login.php,在session_start()前加入session_set_cookie_params(0),防止cookie被浏览器拦截。 - 若仍失败,打开浏览器开发者工具(F12),Application → Cookies,删除所有
PHPSESSID,刷新重登。 - 终极方案:关闭验证码功能,在
module/system/verify.php(或对应登录模型)中临时注释验证码校验代码。
数据库连接失败:前缀冲突与连接数爆满
报错现象:
整个前台白屏,或显示“Database Error: 无法连接数据库”,后台登录直接报“建立数据库连接时出错”。
原因分析:
杰奇默认数据库连接是单例模式,但若主库和从库配置混乱(常见于做过迁移),会导致连接异常;若服务器MySQL并发连接数超过max_connections值(如老配置仅100),会拒绝新连接。
解决步骤:
- 检查
config/database.inc.php或config.php,确认dbhost、dbname、dbuser、dbpw无误,特别注意dbprefix(表前缀)是否和数据库实际一致(如jieqi_)。 - 命令行连接数据库:
mysql -u用户名 -p执行SHOW VARIABLES LIKE 'max_connections';查看当前上限。 - 提高上限:在
/etc/my.cnf的[mysqld]下加max_connections = 500,重启MySQL。 - 若表前缀不一致,直接改配置项,不要手工改数据库(老版本有缓存)。
- 检查连接代码:在
include/db.class.php中,确保@mysql_pconnect改为@mysql_connect(持久连接容易耗尽),并增加if (!$conn) { die('重试...'); }逻辑。
无法读取:编码与字段存储类型作祟
报错现象:
小说列表正常,但点击章节后要么404,要么页面空白,只有标题没有正文,数据库里能查到内容,但前台显示“内容不存在”。
原因分析:
杰奇老版本将正文存为TEXT类型,但很多新环境默认字符集是utf8mb4,而老数据是utf8,导致汉字读取时出现乱码或无法匹配,伪静态规则若未配置,URL参数cid丢失。
解决步骤:
- 检查页面URL是否含
?cid=123,若无,则伪静态规则有问题(见下文第六点)。 - 打开数据库执行:
ALTER TABLE `jieqi_article_chapter` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE `jieqi_article_content` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- 在
config.php中强制设置header('Content-Type: text/html; charset=utf-8');,并屏蔽所有mb_http_output干扰。 - 检查
module/article/reader.php,确认读取正文用的SQL是否拼接了WHERE cid = '$_GET[cid]',若直接使用变量,请用intval()强制转整型。
页面空白或乱码:BOM头与模板缓存未清
报错现象:
前台首页打开是白屏,但查看源代码有HTML,或页面显示一堆“锟斤拷”“鈥楾”等不可读字符。
原因分析:
老杰奇模板文件(.tpl或.html)可能是GBK编码,直接放到了UTF-8环境下导致乱码;模板编译缓存(cache/目录)若被其他程序冲突,会输出空内容。
解决步骤:
- 用Notepad++或VSCode打开模板目录下的所有
.html文件,将编码转为 UTF-8无BOM 格式。 - 删除
cache/compiled/和cache/tpl/下所有文件,并chmod -R 777 cache。 - 若仍然白屏,在入口文件
index.php最顶部加error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE);,并ini_set('display_errors', 'On');查看具体警告。 - 检查
include/common.inc.php中是否有ob_start()但未调ob_flush(),这会导致缓冲区不输出。
伪静态规则不生效:Nginx/Apache配置拉胯
报错现象:
开启伪静态后,首页能打开,但内页全部404,或后台设置里勾选伪静态后,生成URL还是动态的(如?mod=article&article_id=1)。
原因分析:
杰奇官方只提供Apache的.htaccess规则,而Nginx根本没给对应配置文件,若用Nginx,规则写错或没写到站点server块内,直接空转。
解决步骤:
- Apache用户:请确保站点根目录存在
.htaccess为官方提供的RewriteRule规则,若开启CDN,需在httpd.conf中允许AllowOverride All。 - Nginx用户(重点):在
/usr/local/nginx/conf/vhost/你的域名.conf的server{}块内,添加:location / { if (!-e $request_filename) { rewrite ^/book/([0-9]+)\.html$ /module/article/reader.php?cid=$1 last; rewrite ^/list/([0-9]+)\.html$ /module/article/list.php?sortid=$1 last; # 其他规则类推 } } - 保存后执行
nginx -t,再systemctl reload nginx。 - 若规则对不上,直接回后台关闭伪静态,改用动态URL兼容。
采集模块报错:目标站反爬与接口失效
报错现象:
采集器运行时提示“采集失败:链接超时”或“内容抓取为空”,甚至卡死无反应。
原因分析:
停更后,内置采集规则(如20多个第三方源)早已失效,目标网站要么关停,要么加了验证码和JS保护,杰奇采集依赖file_get_contents或curl函数,若PHP配置了代理,无法正确访问外网。
解决步骤:
- 后台→采集管理→编辑原有规则,将“来源URL”改为当前依然存活的小说站(如起点、纵横的PC版页面),注意抓取正则需重写。
- 若不会写正则,改用外部采集工具(如火车头),并导出为杰奇标准JSON格式,再用
admin/admin_article.php的导入功能入库。 - 在
php.ini中增加max_execution_time = 300,避免因超时导致脚本中断。 - 对于页面编码非UTF-8的站点,在采集回调函数
get_content中,手动mb_convert_encoding($html, 'UTF-8', 'GBK')。 - 若目标站有防盗链,需在采集请求头中添加
Referer和User-Agent(改include/http.class.php)。
杰奇CMS停止更新,就像一把生锈的老刀——没人给你打磨,但刀刃还在,以上七个高频雷区,是我这半年摸索出来的“硬汉式”修复方案,别指望官方补丁,自己动手,每修一个问题,就当给这把老刀重新淬一次火。老兵不死,只是会漏气——补上就行。



发表评论