PHP組件目錄Packagistphp
Packagist是查找PHP組件的地方,Composer是安裝PHP組件的工具github
安裝:json
curl -sS https://getcomposer.org/installer | php
使用curl下載Composer的安裝腳本,使用PHP執行安裝腳本,最後在當前目錄中建立composer.phar文件bash
有用的一條命令:app
sudo mv composer.phar /usr/local/bin/composercomposer
把composer編程可執行的二進制文件:curl
sudo chmod +x /usr/local/bin/composer函數
在~/.bash_profile
中添加下面這行代碼:
PATH=/usr/local/bin:$PATH
命令行中執行composer
. Bingo
進入項目的最頂層目錄,而後爲每一個PHP組件執行一次:
composer require vendor/package
這個命令能夠安裝這個組件的最新穩定版。
執行命令的接軌哦能夠在項目最頂層目錄中新建或更新的composer.json
文件中查看。執行這個命令後還會建立一個composer.lock
文件。
這個文件會列出項目使用的全部PHP組件,以及組件的具體版本號。這實際上是鎖定了項目,讓項目只能使用具體版本的PHP組件。
Why? 若是有composer.lock文件,Composer會下載這個文件中列出的具體版本,而無論Packagist中可用的最新八本是多少。因此,應該把composer.lock
文件歸入版本控制,讓你們使用相同版本的PHP組件。
composer.lock
有個缺點,composer install
命令不會安裝避其中列出的版本號新的版本。若是須要下載新版組件,須要使用
composer update
咱們只需在scan.php文件的頂部使用require函數導入Composer建立的自動加載器:
<?php require 'vendor/autoload.php';
Composer建立的自動加載器就是名爲autoload.php
的文件。這樣咱們就能夠在項目中實例化任何組件。
經過Guzzle和CSV組件編寫scan.php腳本。
<?php require 'vendor/autoload.php'; $client = new \GuzzleHttp\Client(); $csv = new \League\Csv\Reader($argv[1]); foreach ($csv as $csvRow) { try { $httpResponse = $client->options($csvRow[0]); if ($httpResponse->getStatusCode >= 400) { throw new \Exception(); } } catch (\Exception $e) { echo $csvRow[0] . PHP_EOL; } }
實例化組件時,這裏使用了
\GuzzleHttp
&\League\Csv
命名空間。
執行:
php scan.php urls.csv
Composer能夠管理放在須要認證的倉庫中的私有組件。
執行composer install
or composer update
時,若是須要認證,Composer會提醒你。
Composer還會詢問你是否把倉庫的認證保存在本地的auth.json
文件中。
auth.json:
{ "http-basic": { "example.org": { "username": "", "password": "" } } }
若是不想等Composer向你詢問認證憑據,使用下述命令:
composer config http-basic.example.org your-username your-password
解釋一下:http-basic告訴Composer,咱們要爲指定的域名天假認證信息,example.org是主機名。這個命令會在當前項目中的auth.json文件裏保存憑據。
src/ tests/ composer.json README.md CONTRIBUTING.md LICENSE CHANGELOG.md
舉個例子:
{ "name": "vendor/package", "description": "", "keywords": ["", ""], "homepage": "http://example.org", "license": "MIT", "authors": [ { "name": "", "homepage": "", "role": "Developer" } ], "support": { "email": "" }, "require": { "php": ">=5.4.0", "vendorX/packageX": "~5.0" }, "require-dev": { "vendorY/packageY": "~4.3" }, "suggest": { "league/csv": "~6.0" }, "autoload": { "psr-4": { "namespace\\subnamespace\\": "src/" } } }
其中:
support
的對象是建議安裝的組件,以防與其餘組件合做時須要。
autoload
: 在PSR-4中,咱們要把組件的命名空間前綴與相對組件根目錄的文件系統路徑對應起來。
若是實例化虛構的namespace\subnamespace\Url\Scanner
類,Composer會自動加載src/Url/Scanner.php
文件。
Demo: http://getcomposer.org
組件的名稱和描述
安裝說明
用法說明
測試說明
貢獻方式說明
支持資源
做者信息
軟件許可證
Demo
<?php namespace namespace\subnamespace\Url; class Scanner { protected $urls; /** @var \GuzzleHttp\Client */ protected $httpClient; public function __construct(array $urls) { $this->urls = $urls; $this->httpClient = new \GuzzleHttp\Client(); } public function getInvalidUrls() { $invalidUrls = []; foreach ($this->urls as $url) { try { $statusCode = $this->getStatusCodeForUrl($url); } catch (\Exception $e) { $statusCode = 500; } if ($statusCode >= 400) { array_push($invalidUrls, [ 'url' => $url, 'status' => $statusCode ]); } } return $invalidUrls; } protected function getStatusCodeForUrl($url) { $httpResponse = $this->httpClient->options($url); return $httpResponse->getStatusCode(); } }
提交代碼到本身的github上
能夠經過設置鉤子,每次更新組件的repo時,通知Packagist: https://packagist.org/profile/
使用: composer require vendor/package
<?php require 'vendor/autoload.php'; $urls = [ 'http://php.net', 'http://apple.com' ]; $scanner = new \namespace\subnamespace\Url\Scanner($urls); print_r($scanner->getInvalidUrls());
參考
Modern PHP