一、前言
如題所示,博主在下載laravel5.4
的Predis
擴展的時候遇到的錯誤,本來只是個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