鍍金池/ 教程/ PHP/ 依賴管理
依賴管理
安全
測(cè)試
使用模板
開(kāi)發(fā)實(shí)踐
入門指南
服務(wù)器與部署
社區(qū)
語(yǔ)言亮點(diǎn)
錯(cuò)誤與異常
虛擬化技術(shù)
資源
文檔撰寫
數(shù)據(jù)庫(kù)
依賴注入
緩存
代碼風(fēng)格指南

依賴管理

PHP 有很多可供使用的庫(kù)、框架和組件。通常你的項(xiàng)目都會(huì)使用到其中的若干項(xiàng) - 這些就是項(xiàng)目的依賴。直到最近,PHP 也沒(méi)有一個(gè)很好的方式來(lái)管理這些項(xiàng)目依賴。即使你通過(guò)手動(dòng)的方式去管理,你依然會(huì)為自動(dòng)加載器而擔(dān)心。但現(xiàn)在這已經(jīng)不再是問(wèn)題了。

目前 PHP 有兩個(gè)使用較多的包管理系統(tǒng) - ComposerPEAR。Composer 是 PHP 所使用的主要的包管理器,然而在很長(zhǎng)的一段時(shí)間里,PEAR 曾經(jīng)扮演著這個(gè)角色。你應(yīng)該了解 PEAR 是什么,因?yàn)榧词鼓銖膩?lái)沒(méi)有使用過(guò)它,你依然有可能會(huì)碰到對(duì)它的引用。

Composer 與 Packagist

Composer 是一個(gè)杰出 的依賴管理器。在 composer.json 文件中列出你項(xiàng)目所需的依賴包,加上一點(diǎn)簡(jiǎn)單的命令,Composer 將會(huì)自動(dòng)幫你下載并設(shè)置你的項(xiàng)目依賴。

現(xiàn)在已經(jīng)有許多 PHP 第三方包已兼容 Composer,隨時(shí)可以在你的項(xiàng)目中使用。這些「packages(包)」都已列在 Packagist,這是一個(gè)官方的 Composer 兼容包倉(cāng)庫(kù)。

如何安裝 Composer

你可以安裝 Composer 到局部 (在你當(dāng)前工作目錄;這里不是很推薦)或是全局(e.g. /usr/local/bin)。我們假設(shè)你想安裝 Composer 到局部。在你的項(xiàng)目根目錄輸入:

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

這條命令將會(huì)下載 composer.phar (一個(gè) PHP 二進(jìn)制檔)。你可以使用 php 執(zhí)行這個(gè)文件用來(lái)管理你的項(xiàng)目依賴。 請(qǐng)注意: 假如你是直接下載代碼來(lái)編譯,請(qǐng)先在線閱讀代碼確保它是安全的。

Windows環(huán)境下安裝

對(duì)于Windows 的用戶而言最簡(jiǎn)單的獲取及執(zhí)行方法就是使用 ComposerSetup 安裝程序,它會(huì)執(zhí)行一個(gè)全局安裝并設(shè)置你的 $PATH,所以你在任意目錄下在命令行中使用 composer。

如何手動(dòng)安裝 Composer

手動(dòng)安裝 Compose r是一個(gè)高端的技術(shù);僅管如此還是有許多開(kāi)發(fā)者有各種原因喜歡使用這種交互式的應(yīng)用程序安裝 Composer。在安裝前請(qǐng)先確認(rèn)你的PHP安裝項(xiàng)目如下:

  • 正在使用一個(gè)滿足條件的 PHP 版本
  • .phar 文件可以正確的被執(zhí)行
  • 相關(guān)的目錄有足夠的權(quán)限
  • 相關(guān)有問(wèn)題的擴(kuò)展沒(méi)有被載入
  • 相關(guān)的 php.ini 設(shè)置已完成

由于手動(dòng)安裝沒(méi)有執(zhí)行這些檢查,你必須自已衡量決定是否值得做這些事,以下是如何手動(dòng)安裝 Composer :

    curl -s https://getcomposer.org/composer.phar -o $HOME/local/bin/composer
    chmod +x $HOME/local/bin/composer

路徑 $HOME/local/bin (或是你選擇的路徑) 應(yīng)該在你的 $PATH 環(huán)境變量中。這將會(huì)影響 composer 這個(gè)命令是否可用.

當(dāng)你遇到文檔指出執(zhí)行 Composer 的命令是 php composer.phar install時(shí),你可以使用下面命令替代:

    composer install

本章節(jié)會(huì)假設(shè)你已經(jīng)安裝了全局的 Composer。

如何設(shè)置及安裝依賴

Composer 會(huì)通過(guò)一個(gè) composer.json 文件持續(xù)的追蹤你的項(xiàng)目依賴。 如果你喜歡,你可以手動(dòng)管理這個(gè)文件,或是使用 Composer 自己管理。composer require 這個(gè)指令會(huì)增加一個(gè)項(xiàng)目依賴,如果你還沒(méi)有 composer.json 文件, 將會(huì)創(chuàng)建一個(gè)。這里有個(gè)例子為你的項(xiàng)目加入 Twig 依賴。

    composer require twig/twig:~1.8

另外 composer init 命令將會(huì)引導(dǎo)你創(chuàng)建一個(gè)完整的 composer.json 文件到你的項(xiàng)目之中。無(wú)論你使用哪種方式,一旦你創(chuàng)建了 composer.json 文件,你可以告訴 Composer 去下載及安裝你的依賴到 vendors/ 目錄中。這命令也適用于你已經(jīng)下載并已經(jīng)提供了一個(gè) composer.json 的項(xiàng)目:

    composer install

接下來(lái),添加這一行到你應(yīng)用的主要 PHP 文件中,這將會(huì)告訴 PHP 為你的項(xiàng)目依賴使用 Composer 的自動(dòng)加載器。

{% highlight php %}
<?php
require 'vendor/autoload.php';
{% endhighlight %}

現(xiàn)在你可以使用你項(xiàng)目中的依賴,且它們會(huì)在需要時(shí)自動(dòng)完成加載。

更新你的依賴

Composer 會(huì)建立一個(gè) composer.lock 文件,在你第一次執(zhí)行 php composer.phar install 時(shí),存放下載的每個(gè)依賴包精確的版本編號(hào)。假如你要分享你的項(xiàng)目給其他開(kāi)發(fā)者,并且 composer.lock 文件也在你分享的文件之中的話。 當(dāng)他們執(zhí)行 php composer.phar install 這個(gè)命令時(shí),他們將會(huì)得到與你一樣的依賴版本。 當(dāng)你要更新你的依賴時(shí)請(qǐng)執(zhí)行 php composer.phar update

當(dāng)你需要靈活的定義你所需要的依賴版本時(shí),這是最有用。 舉例來(lái)說(shuō)需要一個(gè)版本為 ~1.8 時(shí),意味著 “任何大于 1.8.0 ,但小于 2.0.x-dev 的版本”。你也可以使用通配符 *1.8.* 之中?,F(xiàn)在Composer在composer update 時(shí)將升級(jí)你的所有依賴到你限制的最新版本。

更新通知

要接收關(guān)于新版本的更新通知。你可以注冊(cè) VersionEye,這個(gè) web 服務(wù)可以監(jiān)控你的 Github 及 BitBucket 帳號(hào)中的 composer.json 文件,并且當(dāng)包有新更新時(shí)會(huì)發(fā)送郵件給你。

檢查你的依賴安全問(wèn)題

Security Advisories Checker 是一個(gè) web 服務(wù)和一個(gè)命令行工具,二者都會(huì)仔細(xì)檢查你的 composer.lock 文件,并且告訴你任何你需要更新的依賴。

處理 Composer 全局依賴

Composer 也可以處理全局依賴和他們的二進(jìn)制文件。用法很直接,你所要做的就是在命令前加上global前綴。如果你想安裝 PHPUnit 并使它全局可用,你可以運(yùn)行下面的命令:

{% highlight console %}
composer global require phpunit/phpunit
{% endhighlight %}

這將會(huì)創(chuàng)建一個(gè) ~/.composer 目錄存放全局依賴,要讓已安裝依賴的二進(jìn)制命令隨處可用,你需要添加 ~/.composer/vendor/bin 目錄到你的 $PATH 變量。

PEAR 介紹

PEAR 是另一個(gè)常用的依賴包管理器, 它跟 Composer 很類似,但是也有一些顯著的區(qū)別。

PEAR 需要擴(kuò)展包有專屬的結(jié)構(gòu), 開(kāi)發(fā)者在開(kāi)發(fā)擴(kuò)展包的時(shí)候要提前考慮為 PEAR 定制, 否則后面將無(wú)法使用 PEAR.

PEAR 安裝擴(kuò)展包的時(shí)候, 是全局安裝的, 意味著一旦安裝了某個(gè)擴(kuò)展包, 同一臺(tái)服務(wù)器上的所有項(xiàng)目都能用上, 當(dāng)然, 好處是當(dāng)多個(gè)項(xiàng)目共同使用同一個(gè)擴(kuò)展包的同一個(gè)版本, 壞處是如果你需要使用不同版本的話, 就會(huì)產(chǎn)生沖突.

如何安裝 PEAR

你可以通過(guò)下載 .phar 文件來(lái)安裝 PEAR. 官方文檔安裝部分 里面有不同系統(tǒng)中安裝 PEAR 的詳細(xì)信息.

如果你是使用 Linux, 你可以嘗試找下系統(tǒng)應(yīng)用管理器, 舉個(gè)栗子, Debian 和 Ubuntu 有個(gè) php-pear 的 apt 安裝包.

如何安裝擴(kuò)展包

如果擴(kuò)展包是在 PEAR packages list 這個(gè)列表里面的, 你可以使用以下命令安裝:

{% highlight console %}
pear install foo
{% endhighlight %}

如果擴(kuò)展包是托管到別的渠道上, 你需要 發(fā)現(xiàn) (discover) 渠道先, 請(qǐng)見(jiàn)文檔 使用渠道.

使用 Composer 來(lái)安裝 PEAR 擴(kuò)展包

如果你正在使用 Composer, 并且你想使用一些 PEAR 的代碼, 你可以通過(guò) Composer 來(lái)安裝 PEAR 擴(kuò)展包.

下面是從 pear2.php.net 安裝代碼依賴的示例:

{% highlight json %}
{
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        }
    ],
    "require": {
        "pear-pear2/PEAR2_Text_Markdown": "*",
        "pear-pear2/PEAR2_HTTP_Request": "*"
    }
}
{% endhighlight %}

第一部分 "repositories" 是讓 Composer 從哪個(gè)渠道去獲取擴(kuò)展包, 然后, "repositories" 部分使用下面的命名規(guī)范:

pear-channel/Package

前綴 "pear" 是為了避免沖突寫死的.

成功安裝擴(kuò)展包以后, 代碼會(huì)放到項(xiàng)目的 vendor 文件夾中, 并且可以通過(guò)加載 Composer 的自動(dòng)加載器進(jìn)行加載:

vendor/pear-pear2.php.net/PEAR2_HTTP_Request/pear2/HTTP/Request.php

在代碼里面可以這樣使用:

{% highlight php %}
<?php
$request = new pear2\HTTP\Request();
{% endhighlight %}
上一篇:安全下一篇:代碼風(fēng)格指南