[TOC=2]
>## composer对PHP的作用
现在的世界是要求快速的,如果每个项目都从头开始写,显然不现实,而且质量也得不到保证。PHP有大量开源的项目,如何想自己的项目中使用这些PHP项目,就是**composer**做的事。
MVC中常用的**ORM**,如果你要造一个自己的MVC框架,不可能自己写,那去哪里找这些php的ORM库呢,怎么很好地在项目中引用呢?这就是composer做的是。
说白了,composer就是nodeJS的npm,一个php的包管理工具
>## composer与pear、pcel
你可能听说过pear和pcel,这且这两个名字还很像,容易混淆。pear和composer的功能是一样的,只是没有composer好,目前pear已经被淘汰。而pcel和两者不同,它是安装php扩展的,比如GD库、PDO扩展、CURL扩展,这些扩展是使用C编写的,是PHP底层扩展。
>## composer工作原理
![composer update的整个过程](https://box.kancloud.cn/38d18685274465fcff0c178c9b1d6e15_1240x781.png)
这里经过几个步骤:
1.composer读取composer.json,这个json是在当前执行composer目录的
2.composer通过读取到的json数据去[Packagist.org](https://packagist.org/)获取各个包的包名、作者、下载URL等信息。下载URL经常是GitHub上面的,因为目录的代码大部分都托管在GitHub上面嘛。
3.将从[Packagist.org](https://packagist.org/)获取到的元数据存放到当前目录的composer.lock中
4.composer读取composer.lock中的元数据,根据元数据一次下载包,并且放到当前目录的vender目录里面
composer有不少常用的命令,比如composer install 、composer update、composer require。这三个命令都是会下载php类库的,composer update 会将步骤1、2、3、4都执行一遍,所以下载的类库是composer.json配置中匹配搭配的最新类库,而composer install,只是执行步骤4。
composer require 会将配置写入composer.json,然后执行步骤1、2、3、4
或许你会问,如何知道不同的包他们的配置是怎么写的,这个你就要去[Packagist.org](https://packagist.org/)了,每个开源项目都会有安装和使用方法的。而且很简单哦:)
>## composer安装
composer安装脚本也是使用php写的,执行鞋面的命令下载compsoer的安装脚本,并使用php 执行它就可以安装composer的命令行工具composer.phar到php的bin目录下面。
```
curl -sS https://getcomposer.org/installer | php
```
**或**
```
php -r "readfile('https://getcomposer.org/installer');" | php
```
原理:
curl -sS https://getcomposer.org/installer 将会输出`https://getcomposer.org/installer`这个文件的内容到界面上,通过 管道 `|`传递给`php`,`https://getcomposer.org/installer`就会被执行,这是一个php文件,作用是下载`composer.phar`
`php -r "readfile('https://getcomposer.org/installer');" | php`的原理也是一样的。
>[info]因为下载和执行php需要时间,所以请耐心等待几分钟
**安装到命令行**
你可以将此文件放在任何地方。如果你把它放在系统的 PATH 目录中,你就能在全局访问它。 在类Unix系统中,你甚至可以在使用时不加 php 前缀。
```
sudo mv composer.phar /usr/bin/composer
```
**现在只需要运行 composer 命令就可以使用 composer 而不需要输入 php
composer.phar。**
**下载七牛云SDK:**
>composer require qiniu/php-sdk
- 中国化composer
将composer的pakagist库地址修改为中国全量镜像地址:
```
composer config -g repo.packagist composer https://packagist.phpcomposer.com
```
>## composer卸载包
虽然前面讲解了原理,并且一步步做了安装示例,但是卸载包还是要讲一下。
正如前面说的,`composer update`会将步骤1、2、3、4都执行一遍,所以,只要我们将`composer.json`修改了,然后执行`composer update` 就重新安装整个库了,自然那些不再`composer.json`的包也就不见了,以七牛云为例:
在composer.json中删除`"qiniu/php-sdk": "^7.1"`:
删除前:
~~~
"require": {
"php": ">=5.4.0",
"topthink/framework": "^5.0",
"qiniu/php-sdk": "^7.1"
},
~~~
删除后:
~~~
"require": {
"php": ">=5.4.0",
"topthink/framework": "^5.0"
},
~~~
~~~
#重新安装整个库,OK
composer update
~~~
>注意,` "topthink/framework": "^5.0",`中的都好`,`一定要删除,否则不符合json格式,会报错。
<br><br><br>