記一次手動引入第三方擴充套件程式的經歷

shanyuliang發表於2019-08-02

可能有點囉嗦,請耐心看完。。。

這幾天接到一個需求,具體內容是向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.冷靜,冷靜,冷靜

感謝那些默默付出且提供優質擴充套件包的作者,因為你們讓我的開發效率更上一層!!!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章