记一次手动引入第三方扩展程序的经历

可能有点啰嗦,请耐心看完。。。

这几天接到一个需求,具体内容是向kafka推送数据,之前咱也没用过kafka,也不知道具体怎么操作,一顿谷歌百度后发现其实并不难,而且在对接kafka上这两个扩展是非常不错 weiboad/kafka-phparnaud-lb/php-rdkafka,不同的是前一个使用PHP开发,而且不需要安装扩展,后一个则是使用c语言开发,且需要安装PHP扩展,对我来说那个方便用哪个,毫不犹豫使用了第一个扩展。

因为我负责的项目使用的是laravel框架,安装扩展显得那么的容易,经过一番快速安装配置,轻轻一点消息轻松发送成功。然后自己测试觉得没问题,就叫项目经理看一下,结果说搞错项目了,不是这个项目要推送,我尼玛,心里顿时万马奔腾,你给我需求却不是我负责的项目,那你倒是说一下啊!!!

哎,生气也没什么用,就问清楚是哪个项目,这次心里有准备了,把项目问的清楚明白再开始动手。问清楚后,还是按着原来的思路,找扩展,一顿安装配置,然后发送成功,心里顿时美滋滋。但是当我打开项目代码时,顿时蒙了,Zend Framework 1.1.1 这是多么古老的版本,奈何本人见识不广,没用过这么古老的版本,通过看代码,大致了解到,没有用composer管理项目,引入项目基本通过require/include方式,加之命名空间方式也别具一格,也可以说没有命名空间,感觉发现宝藏似的,深深吸引了我。刚开始不知道怎么做好,首先想到的是,安装PHP扩展的方式来解决,也就是按着arnaud-lb/php-rdkafka这个扩展来部署,看过文档发现这个扩展对window支持并不友好,操作起来有点难,因为本地也配置了homestead环境,想在上面调试一番结果发现也不好操作,于是在virtualbox装了一个centos7,又是一顿配置,PHP终于可以跑起来了,跟着arnaud-lb/php-rdkafka文档一步步操作,此处省略几万字,哈哈哈。

最终在不懈努力下,终于可以勉强使用了,一波测试,提代码,想想就激动,以为事情就这样结束了,没想到啊,没想到,线上环境还没配置,而且系统还不一样,想想之前在虚拟机上的操作就觉得恐怖,于是下定决心使用不需要安装PHP扩展的weiboad/kafka-php包,包下载后,引入成了一个问题,因为命名空间,导致报各种找不到文件,然后想到自己写一个antload文件自动引入(我把包都放在了libs目录下,把autoload.php文件放在包的根目录),如下:

spl_autoload_register(
    function($class) {
        $file = APPLICATION_PATH. '/../libs/'.$class . '.php';
        if (file_exists($file)) {
            require $file;
        }
    },
    true,
    false
);

这样使用这个包,就不用一个个手动引入,结果发现还是报错,缺少了其他依赖库根据提示一个个下载补全,缺什么补什么,最终使用到了下面的三个库:

amphp/amp
Psr/Log
weiboad/kafka-php

最终autoload.php修改成了这样:

require_once APPLICATION_PATH. '/../libs/Amp/functions.php';
spl_autoload_register(
    function($class) {
        $file = APPLICATION_PATH. '/../libs/'.$class . '.php';
        if (file_exists($file)) {
            require $file;
        }
    },
    true,
    false
);

在zend framework上顺利推送数据到kafka。

总结

1.需求理解与分析是最重要的,做之前一定要问清楚,考虑各种情况与使用场景
2.一种方法不行,多尝试,总有一种方法可行
3.冷静,冷静,冷静

感谢那些默默付出且提供优质扩展包的作者,因为你们让我的开发效率更上一层!!!

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 2
tangq

后面那个框架既然可以重写spl_autoload_register函数,为啥不把那三个包直接用composer下载下来,引用vendor文件夹中的autoload呢?

4年前 评论

@tangq 项目不支持composer,我是下载源码引入

4年前 评论
tangq 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!