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