近期工作上需要用到 列式存储数据库 ClickHouse
.
我们服务端语言使用的 PHP
. 中间发生一些比较低级的错误问题, 简单记录描述一下
这个故事除我外包含2个开发同学
接到需求是 从 网上找一个适用于PHP的轮子, 简单写个增删改查.
A同学到composer
中找了个 star和下载 最高,且php版本适配的包.
https://packagist.org/packages/hyvor/clickhouse-php#1.0.0
因为项目历史原因无法进行 composer update
, 所以就直接提取 src
下目录自己改了下规则,符合我们框架自动加载规则.
A同学改完后也没测试 , 交给了B同学 .
B同学pull代码后,开发机测试结果抛错.
抛错后找A同学, A同学让B同学自己去解决问题.
B同学开始各种百度了.
先是将项目composer update 的了, 导致框架中大量老代码被删除(存在下架的轮子).
然后又百度参考的文章 这个是需要编译安装php扩展. 在B同学一番操作后, 他开发机php版本从7.2 变成了5.4.
https://blog.csdn.net/qq_42151074/article/details/131881304 (避坑)
他根本没有观察扩展的指令还有舍配的 php版本.
B同学在一番操作后在工作群里描述各种不好用.
我看到后开始帮忙解决问题.
首先我需要先复现问题(并不了解B同学做了哪些工作 , 只看到上面的图).
我写了个脚本简单运行下连接库.
Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running 5.4.16, please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.
PHP Fatal error: Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running 5.4.16, please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.
in xxxxx/vendor/autoload.php on line 20
or autoloading on PHP <5.6 and you are
看到这个错误, 我第一时间想到的是composer
选的轮子版本太低,不支持5.6以上.
在一番操作重新选了一个支持 >=7.1
的版本. 安装后再次运行. 发现错误依旧.
我这时候试看了下php 版本
$ php -v
PHP 5.4.16 (cli) (built: Nov 28 2023 19:19:14)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
我瞬间就懵逼了. 问B同学, 他说是我给他搞坏的, 我笑了.
通过 locate php |grep -i bin
, 发现他开发机存在7.2版本, 那肯定是有人搞事情.
这时候B同学掏出他百度的文章. 还有编译安装的教程. 破案了......
在一切都恢复到 A同学给的代码版本后 , 我继续用我的脚本运行, 响应的错误是相同的.
实际上就是 A同学选型的轮子中存在其他依赖的类库. 我们框架中并没有.
那现在简单, 重新选个轮子就好了.
https://packagist.org/packages/the-tinderbox/clickhouse-php-client#3.1.0
选型条件: 依赖少, 安装量高 , star高, 版本适配.
在选型过程中B同学还想要安装他的扩展, 晕死看的懂的轮子不用, 选读不到的扩展. 真是不理解.
最后的 composer
选型, 也是手把手告诉 B同学需要将src
文件提取后, 更改命名空间和项目路径, 匹配自动加载规则.
一次不太愉快的辅助体验.