Pages

Sunday, 26 January 2020

PHP的三种工具pecl/pear/composer的区别及基本使用


PEAR简介

PEAR 是“PHP Extension and Application Repository”的缩写,即PHP扩展和应用仓库。
PEAR将PHP程序开发过程中常用的功能编写成类库,涵盖了页面呈现、数据库访问、文件操作、数据结构、缓存操作、网络协议、WebService 等许多方面,用户可以通过下载这些类库并适当的作一些定制以实现自己需要的功能。避免重复发明“车轮”。PEAR 的出现大大提高了PHP 程序的开发效率和开发质量。但现在PEAR已经被Composer代理。


PECL简介

PECL 是“PHP Extension Community Library”的缩写,即PHP 扩展库。
PECL 可以看作PEAR 的一个组成部分,提供了与PEAR 类似的功能。不同的是PEAR的所有扩展都是用纯粹的PHP代码编写的,用户在下载到PEAR 扩展以后可以直接使用将扩展的代码包含到自己的PHP 文件中使用。而PECL是使用C 语言开发的,通常用于补充一些用PHP难以完成的底层功能,往往需要重新编译或者在配置文件中设置后才能在用户自己的代码中使用。
最直接的表述:PEAR是PHP的上层扩展,PECL是PHP的底层扩展。它们都是为特定的应用提供现成的函数或者类。

PECL与PEAR的关系

由于PEAR与PECL项目的特殊关系(PECL是PEAR的一个组成部分,可以认为是其子项目),所以并不存在一个叫pecl的安装包让你安装之后使用pecl命令,你只需要安装pear即可,安装pear后,同时会有两个命令,一个是pear,一个是pecl。
PEAR官网对PECL的介绍:

PECL官网对PECL的介绍:

PECL的基本使用

查看帮助:
pecl help
Bash
搜索扩展:
pecl search 扩展名
Bash
安装扩展:
pecl install 扩展名
Bash
安装扩展会自动下载扩展源码,然后自动编译成扩展名.so,最后自动在php.ini的开头添加上extension=扩展名.so引用它。
卸载扩展:
pecl uninstall 扩展名
Bash
还没试过,应该就是把扩展名.so删掉,不过应该不会删除php.ini中的引用,因为添加好添加,删除估计不好删除。
更新扩展(其实就相当于重装):
pecl upgrade 扩展名
Bash

Composer

Composer简介

composer 是php的包管理工具(composer中文文档),优点在于仅需要提供一个composer.json文件,申明需要用到的三方库,一个简单的命令就能将其依赖全部装好。
总结:composer和pear功能是一样的,但是composer更方便好用,pear差不多被淘汰了。

composer设置国内镜像源

全局设置packagist中国全量镜像(推荐):
composer config -g repo.packagist composer https://packagist.phpcomposer.com
Bash
该设置,其实是往composer的全局配置文件~/.composer/config.json中添加以下配置(所以你手动去该文件中添加也是一样的):
{
    "config": {},
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    }
}
JSON
只给当前项目设置国内源:
composer config repo.packagist composer https://packagist.phpcomposer.com
Bash
其实就是在当前项目下的composer.json末尾添加以下json(所以你手动添加也是一样的):
"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}
JSON

composer的基本用法

注意:composer的所有命令,都是在某个项目的根目录下执行的,如果你要操作全局,则在命令的前面添加global即可。
# 显示所有命令
composer list

# 查看全局配置
composer config -gl

# 显示所有已安装的包(show和info都同一个意思)
composer show
composer info

# 查看指定包信息(show和info都同一个意思)
composer show monolog/monolog
composer info monolog/monolog

# 在 composer.json 配置中添加依赖库之后运行此命令安装(i是install的简写,一个意思)
composer install
composer i

# 创建项目
composer create-project laravel/laravel Laravel –prefer-dist "5.1.*"

# 搜索包
composer search packagename

# 更新所有包(update/upgrade/u都是一个意思,兼容写法而已)
composer update
composer upgrade
composer u

# 更新指定包(update/upgrade/u都是一个意思,兼容写法而已)
composer update monolog/monolog
composer upgrade monolog/monolog
composer u monolog/monolog

# 更新composer自己(兼容写法,有杠没杠都行)
composer self-update
composer selfupdate

# 移除指定的包
composer remove monolog/monolog

# 安装指定包
composer require monolog/monolog
# 在前面添加“global”表示全局安装,Mac在“~/.composer”中,WinC盘对应用户目录中
composer global require hirak/prestissimo

# 安装指定包和版本(三种版本的写法都行)
composer require monolog/monolog:1.19
composer require monolog/monolog=1.19
composer require monolog/monolog 1.19
composer require monolog/monolog=1.0.x@dev

# 安装dev版本
composer require monolog/monolog:dev-master

# 查看谁依赖“guzzlehttp/guzzle”这个包(depends和why一个意思)
composer depends guzzlehttp/guzzle
composer why guzzlehttp/guzzle

# 查看谁在阻止“guzzlehttp/guzzle”的安装(prohibits和why-not是一个意思)
composer prohibits guzzlehttp/guzzle
composer why-not guzzlehttp/guzzle

# 查看有哪些包有新版本
composer outdated

# 查看本地有哪些包有改变(相当于git的“git status”,用于查看修改了哪些文件)
composer status

# 清除安装缓存(两个是一样的,有杠没杠都行)
composer clearcache
composer clear-cache

# “hirak/prestissimo”是一个能让你的composer在安装包的时候并行下载的工具,使用以下命令把它安装到全局库中吧
composer global require hirak/prestissimo
Bash