composer報錯:received xxx bytes out of the 以及composer手動引入擴展包

一、前言

      如題所示,博主在下載laravel5.4Predis擴展的時候遇到的錯誤,本來只是個composer下載的報錯,只是處理這個問題的時候,又遇到很多知識點,索性記錄一下,也方便同樣遇到這個問題的朋友們。

二、普通解決方案

      經過各種搜索查詢,網上普遍的解決方案主要是下面兩種。

1、設置國內的下載源

有一部分前輩說這個問題是因爲源地址的問題,換成國內的源即可解決。

composer config repo.packagist composer https://packagist.phpcomposer.com

這種方式確實能替換源地址,只不過對於博主來說並沒有解決實際問題。

2、設置compoer緩衝大小

後續百度發現有人說是緩存問題,緩存大小是:cache-files-maxsize

(1)查看composer配置文件

composer config -l

[cache-ttl] 15552000
[cache-files-ttl] 15552000
[cache-files-maxsize] 300MiB (1073741824)
[bin-compat] auto
[discard-changes] false
[autoloader-suffix]
[sort-packages] true
[optimize-autoloader] true
[classmap-authoritative] false
[apcu-autoloader] false

      緩存大小隻有300M,這麼說來的話,如果更新的包比較大,還真有可能下載不下來,因此更給爲1024M試試。

(2)修改配置文件:

//修改緩存大小爲1024MB

composer config --global cache-files-maxsize 1024MiB   

其他的:

composer config --global data-dir /www/.composer
composer config --global cache-dir /www/.composer

      修改的樣式都是這樣的,其實格式和更改源路徑的時候差不多,只不過一時沒想到,耗費了不少時間,這裏需要注意格式是MiB。另外,對博主來說,修改完之後還是下載擴展包失敗,那就沒辦法了,只能祭出我的大殺器。

三、手動引入Predis下載包

      博主用盡渾身解數加上等待composer下載實在是浪費時間,無奈只好下載擴展包,然後通過composer自動加載機制引入擴展包。只是想法很美好,原理很簡單,實施很艱難吶。

1、下載predis的包

下載鏈接: https://makeoss.oss-cn-hangzhou.aliyuncs.com/%E7%BC%96%E7%A8%8B/predis.zip

下載完成後,把包放到vendor下面即可。

2、執行 composer dumpautoload

      一般都是把擴展包放到vendor之後,執行 composer dumpautoload 即可,但是博主這裏執行之後,使用包的時候報錯:

Class 'Predis\Client' not found

代表這個擴展包沒有被框架自動加載。

3、修改composer.json,實現自動加載

      既然要composer自動加載不現實了,那咱們只能手動更改了。根據composer自動加載規則,單獨文件的話可以直接在autoload裏面的files直接加上路徑,比如一些函數文件等。

      像咱們這種擴展包,需要在classmap裏面給出目錄,然後執行composer dump-autoload,自動加載才生效,它會把這個自動加載寫入自動加載的配置文件中,這樣我們的predis擴展才能用的到。

      感興趣的話,可以去vendor/composer中看看autoload_classmap.php,我們會看到新增了predis加載標準,這樣在框架運行的時候,自然就能依據psr-4自動加載規範找到咱們需要的方法。

  "autoload": {
        "classmap": [
            "database",
            "vendor/predis"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files":[
            "app/Helpers/functions.php"
        ]
    },

4、執行 composer dumpautoload

      執行命令之後,刷新,錯誤消失 ,可以正常獲取存儲的值了

四、總結

      出現這個問題,本質上還是對於composer的理解不夠透徹,總以爲下載個包就可以了,只是當這個包下載不下來的時候,我們又如何手動下載這個包,並把包通過autoload加載進框架呢?composer的自動加載部分如何添加,類的自動加載又要經過哪些步驟?這些都是我們要了解的知識,加油吧各位!

end


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章