NexusPHP更新支持PHP7&PHP8

2020年10月14日,我在贴吧发了个帖说要为 NexusPHP 做一个移动端 App,过程中遇到一个比较棘手的问题是如何从富文本中提取有用字段 ,尤其是存在多层嵌套的引用时更是困难。在研读源码时发现 Nexus PHP(以下简称 NP)原来做了很多的处理,各种细节都有考虑,意识到前人在这个项目上花费了不少的心血。国内玩家搭建 Private Tracker 几乎清一色的使用 NP,因为它功能全面又符合国人使用习惯,开箱即用,简单易上手。但 NP 项目年久失修,官网早已不知去向,域名都在拍卖中,目前能找到的代码基本是 nexusphp.v1.5.beta5.20120707,最高能运行在 PHP 5.6 之上。鉴于 PHP 官方团队早已对 5.x 结束支持,目前活跃支持仅支持到 7.3(截止2021-01-04),仅出于安全考虑,也是有必要进行升级的。

用 NP 建站的或许自己做了修改支持了 PHP 7 或以上,但基本不会公开。而有的还玩起了将国外的程序本地化,甚至从头写的都有,这就有点不太现实了。简单统计了一下 NP 的代码量:

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
PHP                            417           3677           2112          44038
CSS                             17            108              0           4443
JavaScript                       9            357            378           2243
-------------------------------------------------------------------------------
SUM:                           443           4142           2490          50724
-------------------------------------------------------------------------------

443 个文件、2490 行注释、50724 行 PHP+Javascript+CSS,单就代码量来说已经不小了,还要研究 Bencode 以及测试它的整个工作流程,还包含一个论坛程序,从头写谈何容易。

还是做下升级比较实际。近期花了几天时间完成了相关的开发工作。主要的更新有以下几点:

  • Redis 替换 Memcache
  • Mysqli 替换 Mysql
  • preg_replace_callback 替换 /e 修饰符
  • 修复数组下标不加引号引发的 fatal error
  • 修复 $_GET&$_POST 变量未判断直接使用引发的 warning

第 1 点简单,复制 classes/class_cache.php 命名为 classes/class_cache_redis.php,修改其 connect()/cache_value()/get_value()/delete_value() 即可。引入的地方改为引入此类。

第 2 点稍为复杂,补充用到的 mysql_ 类方法,有以下:mysql_connect(), mysql_errno(), mysql_error(), mysql_query(), mysql_select_db(), mysql_num_rows(), mysql_fetch_array(), mysql_fetch_assoc(), mysql_fetch_row(), mysql_real_escape_string(), mysql_insert_id(),在方法内部使用 Mysqli 对应的方法去执行。

剩下的就是纯机械工作了。如果不修改报错级别,最后一点也可以不考虑,但作为有洁癖人士,还是把报错级别改为全部并一一修复了。

另外的一点改动就是把在函数文件 functions.php 里的引入改到 core.php 中进行引入,毕竟文件名是什么就只做什么事比较好。目前改动了 100 个文件,1545 处插入 791 处删除,完整变动点此查看。有任何问题,可在此留言或提 issue。

另外,搭建了演示站:http://demo.nexusphp.org,运行在 PHP 7.2.0 之上。有空可以点点,欢迎提 bug。

向 NexusPHP 团队致敬!

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注