阿里云Linux服务器centos7在宝塔环境下,安装Composer提示Failed to decode zlib stream的解决办法

前言

在接口开发过程中,需要安装Composer进行插件调用。
现代高级编程语言,依赖管理工具是必不可少的。Java有Maven,Python有pip,Nodejs有npm, 而在composer出现之前,PHP只有被广为诟病的Pear, 由于Pear实在太难用,很少PHP开发者用到这个工具。以致于PHP的开发生态很糟糕。

连一个像样的依赖管理工具都没有,让PHP这门占据了web网站开发主流市场的语言很尴尬。开发过程中,要用到第三方的类库,需要去下载zip包,然后解压,放到相应的目录,处理好命名空间,自动加载的问题,如果这个第三方包还有其他依赖项,还要再次重复这个流程,看着隔壁家python和node.js一个命令行就搞定,显得php开发人员的操作既原始又滑稽。

这场面,好比:
file
所幸,金光闪闪的composer驾着七彩祥云来了,PHP终于有了真正意义的依赖管理工具。可以说,composer是现代PHP的基石。

composer解决了项目的依赖关系,且实现了自动加载。开发人员只需要几个命令行,就能获取其他开发者的包,PHP开发工作因此变得如同堆积木,可以根据业务的需求,快速方便地拆解组合代码。

奇怪的是,即使compoer已经诞生好些年了,而且所有主流框架都支持composer,可竟然还有不少PHP开发者不用这个工具。甚至还有人觉得composer加大了PHP的学习难度。

持有这种想法的人,就好像是一辈子都用纸笔手工记账,有朝一日,给他配置了电脑,跟他演示了excel是如何地强大。他不为新事物的强大感到震撼惊喜,而是蹙眉不满地说:“这东西太难学了,我还是习惯用纸笔”。

对于持有这种想法的人,我只能两手一摊。心态衰老的年轻人,如果他的内心一直在装睡,任谁也叫不醒。但时代的步伐可不会因为他们的拉后腿而停止前进,只会把他们远远甩在身后…

查询php的版本号

在本地windows10电脑上,打开Xshell 6并使用密匙对或密码授权登录宝塔服务器。
file

输入“php -v”命令,查询php的版本号,得到如下结果:

PHP 7.2.18 (cli) (built: May  6 2019 11:33:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

centos7安装Composer

访问Composer中文文档,按照里面的教程进行操作。
首先执行如下命令安装 Composer :

curl -sS https://getcomposer.org/installer | php

等待一会之后,可能出现如下提示:

All settings correct for using Composer
Downloading...
Failed to decode zlib stream

这是安装失败了。按照文档里的提示,执行下面的命令:

php -r "readfile('https://getcomposer.org/installer');" | php

等待一会之后,如果出现如下提示,说明安装成功。

All settings correct for using Composer
Downloading...

Composer (version 1.9.0) successfully installed to: /root/composer.phar
Use it: php composer.phar

查看composer信息

查看默认目录的composer信息:

php composer.phar

结果如下:
file

更新版本

composer selfupdate

结果如下:

Updating to version 1.9.0 (stable channel).
   Downloading (100%)         
Use composer self-update --rollback to return to version 1.8.5

查看版本号

composer --version

结果如下:

Composer version 1.8.5 2019-04-09 17:46:47

处理putenv() has been disabled for security reasons问题

查看版本号时,可能会出现下列提示:

PHP Warning:  putenv() has been disabled for security reasons in phar:///usr/bin/composer/vendor/composer/xdebug-handler/src/Process.php on line 149

这是因为部分存在危险的PHP函数被禁用了。putenv()是用来改变或增加环境变量的内容。
在浏览器中,打开宝塔管理面板,选择“配置函数”,按CTRL+F,输入“disable_functions”
file
disable_functions是php禁用函数配置项。

disable_functions = passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv

删除“disable_functions”里面的“putenv”,保存配置即可。

自定义安装目录

百度上的文档和教程,都含糊不清。这里给出正确而详细的安装过程。

温馨提示:此处内容需要后才能查看!

curl -sS https://getcomposer.org/installer | php -- --install-dir=/www/wwwroot/api.feiyunjs.com/api

安装过程中,可能会出现一个“Failed to decode zlib stream”的错误。
这是因为PHP脚本没有指定目录的写入权限。需要在宝塔中设置目录的权限。
在宝塔里,开启项目目录的用户组和公共的写入权限,再次执行安装命令。
file

安装成功后,执行下列命令,查看文件信息:

php /www/wwwroot/api.feiyunjs.com/api/composer.phar

还有一种方法,是先进入项目目录:

cd /www/wwwroot/api.feiyunjs.com/api

然后执行下面的命令,安装composer

curl -sS https://getcomposer.org/installer | php

使用 Composer

确保你的项目目录下,存在“composer.json”文件。如果没有的话,按照指定格式新建一个。
然后执行install命令:

php composer.phar install

执行结果如下:

[root@ihjdoOJJER309OIH api]# php composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing api/jwt (dev-master 45c22a1): Cloning 45c22a1d70
Writing lock file
Generating autoload files

执行完成后,项目目录下会多出一个“composer.lock”文件。
日志中的jwt目录是对比后下载更新的。新下载的目录,会存入vendor目录下。
file

也可能出现执行失败的情况,报“Content-Length mismatch”错误

[Composer\Downloader\TransportException]                                  
  Content-Length mismatch, received 1183 bytes out of the expected 1503698

查看一下当前项目的composer镜像

composer config -l

当前使用的镜像可能有问题。所以需要更换镜像
需要注意的是,更换镜像不要进行全局更换的命令,而是要针对这个项目去更换镜像
所以,要在这个项目的根目录下,也就是composer.json的路径下 
针对这个项目更换镜像。使用阿里云镜像

composer config repo.packagist composer https://mirrors.aliyun.com/composer/

更换镜像后,再执行install命令即可。

更新目录和依赖

如果需要更新目录,可以执行如下命令:

php composer.phar update

如果没有需要更新的文件,结果如下:

[root@ihjdoOJJER309OIH api]# php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

参考资料

composer基本使用

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
EasyClick学习交流①群:737066890
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 阿里云Linux服务器centos7在宝塔环境下,安装Composer提示Failed to decode zlib stream的解决办法

企业级大数据智能营销管理系统

了解详情