使用composer下载扩展包报错
composer报错:Content-Length mismatch, received xxx bytes out of the
解决方案:
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/编程/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`的自动加载部分如何添加,类的自动加载又要经过哪些步骤?这些都是我们要了解的知识,加油吧各位!