[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工作原理

這里經過幾個步驟:
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>