Idle Works, Idle Thoughts

composer

composer是一个PHP包管理工具,类似node的npm,ruby的bundler。它的目的,是自动管理PHP项目中的库依赖关系。

一、下载安装

composer官网下载最新的composer。一共是4个PHP命令。

1.0 下载:

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

2.0 验证SHA值。不同的版本当然有不同的SHA值,所以这个命令应该在你下载时,从download页面获取。

3.0 运行安装:

$ mkdir bin
$ php composer-setup.php --install-dir=bin --filename=composer

命令行参数表示把composer安装在本地目录下的bin目录中,并重命名为compser。这步的主要工作:

安装后,composer即是一个可执行文件。当然也可以安装在系统目录下供全局访问。

4.0 删除composer-setup.php文件。

$ php -r "unlink('composer-setup.php');"    

二、在项目中使用composer管理依赖

1.0 首先在项目目录中,建立一个composer.json文件,其中描述依赖关系。如:

$ cat composer.json 
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

依赖包的写法是:vendor_name/project_name,以上monolog/monolog表示vendor是monolog,项目名也是monolog。

2.0 运行composer,下载依赖的库:

$ composer install

这个命令完成以下工作:

composer.lock中定义了所有composer install需要的版本依赖关系。如果用git管理源码,应该把composer.jsoncomposer.lock加入git仓库,而忽略vendor目录(加入.gitigore)。

composer.jsoncomposer.lock的功能看起来很像,但其实不同。一旦生成了.lock文件,再次运行composer install时,就直接用.lock文件下载依赖了。此时,可能会错过依赖库的最新版本,例如,生成.lock时monolog的版本是1.0.1,而随后monolog升级到1.0.9,为了取得依赖库的最新版本,我们需要使用命令:

$ composer update

这个命令将读取composer.json文件,并生成新的composer.lock。

Packagist

Packagist是用composer打包发布PHP库的大本营。我们可以从这里下载实用的PHP库。

在代码中使用第三方库

通过composer下载依赖的第三方库后,我们就可以直接使用了。最简单的方式是通过autoloading。在PHP代码中加入:

<?php

require_once("vendor/autoload.php");

$log = new Monolog\Logger("applog");
$log->pushHandler(new Monolog\Handler\StreamHandler("app.log", Monolog\Logger::WARNING));
$log->addWarning("foobar");

?>

运行并查看日志:

$ php test.php    
$ cat app.log 
[2016-06-17 11:01:04] applog.WARNING: foobar [] []