Composer使用和php有什么关系呢?

我使用composer require 的时候报错:

  You must enable the openssl extension in your php.ini to load information from  
   https://mirrors.demo.com/composer    

然后,我在php.ini中取消注释:

extension=openssl

我现在还是此报错。
1.请问,我还需要做其他什么步骤吗?php是直接是一个bin/php,是没有什么重启不重启说法的呀。

2.Composer使用和php有什么关系呢?

阅读 2.8k
3 个回答

如果你有 openssl 扩展,但是没有启用,可以考虑下面的方法。

先确定你是不是改对了 php.ini ,使用 php --ini 获取当前已经加载的 php.ini 文件,你别改到 fpm 的 php.ini 去了,虽然两边都应该修改。

然后再在最后面加一行

extension=openssl

执行命令 php -m 检查有没有 openssl,再使用 php --ri openssl 检查安装的信息。


如果你没有安装 openssl 扩展,看你说的是 MAC ,那就去找 MAC 下对应版本安装 openssl 扩展的方法,如果安装后,php -m 仍然没有 openssl ,那就再进行前面的操作,来启用 openssl。


Composer使用和php有什么关系呢?

composer 就是一个包管理器。

并且其提供了实现自动加载的 Autoloader,可以在代码中自动帮你加载符合标准的类、文件等,避免写一堆 require 语句在代码里面。

在过去,你如果需要安装一个第三方包,比如 Guzzle ,那你需要去下载 Guzzle 的压缩包,并放到你的项目中,然后使用 require 把 Guzzle 的文件引入进来,你就可以开始 new Guzzle\Guzzle\Client 使用了,有些时候,你可能还需要额外引入一些类,如果这个包是实现了部分的自动加载,那么可能就可以直接使用了,比如 阿里云的 SDK,就是自行实现了一些自动加载和 require。

而且,现在的包,大多数都是为 Composer 而开发的,包自身可能还会去依赖其他的包,比如下面说的这些,而依赖的包一般可能不会出现在当前包的代码里面,就还需要你去自己下载依赖的包并且手动 require。

这只是用到了一个包,你就需要这样操作。那假设,你现在需要用到 aliyun sdk ,它里面要使用到 Guzzle 5.x 来发送请求。假设这时候你还需要安装 EasyWechat,而 EasyWechat 又需要 Guzzle 7.x 来发送请求请求,这时候你项目里面就有 2 个版本的 Guzzle (5.x 和 7.x)。

而在 PHP 里面,一个类一旦被定义后,就不能被重复定义(会触发错误),这也就是为什么早期的一些代码里面会有先判断 class_exists 再定义类。而且,这还会出现一个神奇的情况,如果某个接口先调用了 aliyun 的 sdk ,那你这次请求里面用到的就是 Guzzle 5.x。如果一个接口先调用了 EasyWechat ,那你这次请求里面用到的就是 Guzzle 7.x,这就会让你的代码有很多的不确定性。

还有一些情况就是,你直接跑到官网去下载了一个 Guzzle 的压缩包,放到代码里面去,却发现,我擦?怎么运行不起来?

到文档里面定睛一看,原来是需要 PHP 7.4 以上,而你却在用 PHP 5.6;这个包需要 socket 原来你没有安装,这些在传统的安装方式上,都是家常便饭了。

如果使用 Composer 来安装,那将是什么样子的?

包的作者只需要在 composer.json 中,声明需要的 PHP 版本、依赖及版本,Composer 就会在下载时自动解析这些内容,如果遇到前面说的的,PHP 版本不满足、扩展不满足,就会在安装前直接抛出异常。对于不同包需要同一个依赖,Composer 也会在解析后就进行判断,从而在早期告诉你这个包为什么安装不了(因为版本冲突),如果没有问题,Composer 就会先安装对应的包的依赖,再安装包的本身,最后将这些包放到 vendor 目录下进行统一管理。

在你的代码中就只需要使用 require 一下 vendor/autoload.php,你就可以直接 new 这些类,而不需要去手动的 require 每一个类文件。

这就是 Composer 在做的事。


提问尽可能提供有用的信息,从你的信息里面,别人只知道你在问 php 和 composer,而你进来又在问安装包时缺少扩展的问题。

对于你使用 PHP 版本,操作系统,其他人都不知道。

需要重启的 service php-fpm start , 重启命令百度,每个系统不一样,你可以通过命令 php -m 去查看所有安装的扩展,看下 openssl 在里面才可以。

Composer 只是 php 的包管理工具,就像 npm 一样,如果说关系的话,只是方便了php开发而已,因为一行命令就可以安装你需要的依赖包,如果你不嫌麻烦,不用 Composer,自己手动下载也是可以的

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

简单来讲Composer 是一个php的包管理工具
Composer是用PHP写成的,所以依赖你当前机器上的PHP运行环境

你应该找到这个 取消注释 extension=php_openssl.dll

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏