Composer依赖管理 – PHP的利器

摘要:
PHP的则是PEAR,不过PEAR坑不少:依赖处理容易出问题配置非常复杂难用的命令行接口好在我们有Composer,PHP依赖管理的利器。所以Composer依赖管理库就这样诞生了。上面就是Compser比较重要的需求场景。composerselfupdate等价于composerself-updatedumpautoload当我们更改了composer.json文件中的autoload时,需要执行composerdumpautoload,来让autoload立即生效。install命令会先检查composer.lock锁文件是否存在,如果存在,它将下载composer.lock文件中指定的版本,而忽略composer.json文件中的定义。composerupdaterequirerequire命令一般用来安装新的依赖包,并将依赖写入当前目录的composer.json文件中。

别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配。Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm。PHP 的则是 PEAR,不过 PEAR 坑不少:

  • 依赖处理容易出问题
  • 配置非常复杂
  • 难用的命令行接口

好在我们有 Composer,PHP依赖管理的利器。它是开源的,使用起来也很简单,提交自己的包也很容易。

举个例子,平时我们开始的时候如果不是用框架,想要一个验证码,就要先去Gihutb或者其他地方找一个验证码类,然后在项目中include一下,再编辑编辑就跑起来了,以至于到后期项目维护都可能会出现问题。在Github上开源的,那还能点个watch,看到有Bug修复或新版本发布,能及时跟着升级。

如果下载的扩展包多了,就需要各种include了,还有可能出现命名空间冲突的问题,又要根据项目去更改命名空间,如果扩展包升级了,又要重新下载编辑,这是十分不方便的。所以Composer依赖管理库就这样诞生了。

上面就是Compser比较重要的需求场景。

  1. 能方便安装升级扩展包
  2. 只include就行,不用到处写include
  3. 避免命名空间的冲突

平时都去Github、码云等平台上找扩展包,而现在也有一个网站把所有包综合起来,也就说现在的开发方式:首先在packagist上搜索,然后用Composer安装升级。

安装Composer

傻瓜式安装的话就是直接点击https://getcomposer.org/Composer-Setup.exe,下载安装就行了,安装程序将为你下载Composer并设置你的PATH环境变量,以便你可以简单地Composer从任何目录调用。

安装的过程中需要注意的是要找到php.exe的根目录,选择正确的PHP路径。这里就不提供截图了,因为我也没下好,而且我也是手动安装的。

选择目录应该是这样的:

D:phpStudyphpphp-7.0.12-ntsphp.exe

下面还是着重介绍手动安装的,我觉得这种方法十分好用:

先下载一个composer.phar文件,将phar文件放在developer文件夹中,这个你随意,不限制放在哪个文件夹中。

然后打开DOS窗口,或者快捷键windows+R输入cmd,使用以下命令,先要进入到你放置phar文件的目录

D:developercomposer>echo @php "%~dp0composer.phar" %*>composer.bat

安装成功的标志就是在命令行输入

composer -v

显示如下内容

Composer依赖管理 – PHP的利器第1张

看到这里我就都当成Composer已经安装成功了,在中国局域网内,使用Composer是比较慢的,不过好在国内有镜像,执行如下命令切换到国内的镜像,国内镜像所做的就是缓存所有安装包和元数据到国内的机房并通过国内的 CDN 进行加速,这样就不必再去向国外的网站发起请求。

composer config -g repo.packagist composer https://packagist.phpcomposer.com

这样做就相当于全局更改了配置,我选择修改当前项目的 composer.json 的配置文件:

{
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"}
    }
}

composer常用命令

selfupdate

更新 composer 本身,请经常执行 composer selfupdate 以保持 Composer 一直是最新版本。
composer selfupdate
等价于
composer self-update

dumpautoload

当我们更改了 composer.json 文件中的 autoload 时,需要执行 composer dumpautoload,来让 autoload 立即生效。而不必执行 install 或 update 命令。
composer dumpautoload
等价于
composer dump-autoload

dumpautoload 命令有两个常用的选项:

--optimize (-o): 转换 PSR-0/4 autoloading 到 classmap ,以获得更快的载入速度。这特别适用于生产环境,但可能需要一些时间来运行,因此它目前不是默认设置。

--no-dev: 禁用 autoload-dev 规则。

install

composer install

依据当前目录下的 composer.lock(锁文件) 或 composer.json 文件,所定义的依赖关系,安装依赖包。

install 命令会先检查 composer.lock 锁文件是否存在,如果存在,它将下载 composer.lock 文件中指定的版本,而忽略 composer.json 文件中的定义。

# 查看 composer install 的帮助信息
composer install -h

# 只安装 require 中定义的依赖,而不安装 require-dev 中定义的依赖
composer install --no-dev

update

如果你想更新你的依赖版本,或者你修改了 composer.json 中的依赖关系,想让 composer 按照 composer.json 文件中的定义执行更新操作,就用 update 命令。

composer update

require

require 命令一般用来安装新的依赖包,并将依赖写入当前目录的 composer.json 文件中。

如果 composer.json 文件中,添加或改变了依赖,修改后的依赖关系将被安装或者更新。

composer require

你也可以直接在命令中指明需要安装的依赖包。

composer require barryvdh/laravel-ide-helper

--dev 选项和 require-dev 相对应。如果你的依赖包仅仅用于开发环境,建议加上 --dev 选项。

composer require --dev barryvdh/laravel-ide-helper

create-project

你可以使用 create-project 从现有的包中创建一个新的项目。

它相当于执行了 git clone 命令后,将这个包的依赖安装到它自己的 vendor 目录。

此命令有几个常见的用途:

你可以快速的部署你的应用。

你可以检出任何资源包,并开发它的补丁。

多人开发项目,可以用它来加快应用的初始化。

# 安装 Laravel 项目
composer create-project --prefer-dist laravel/laravel blog 5.5.*

如果没有指定版本号,就默认安装最新的版本。

--prefer-dist: 当有可用的包时,从 dist 安装。

phpStudy集成环境下 安装composer失败

报错提示:

The "https://getcomposer.org/versions"file could not be downloaded: failed to open stream: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
The "https://getcomposer.org/download/1.2.0/composer.phar.sig"file could not be downloaded: SSL: crypto enabling timeout
Failed to enable crypto
failed to open stream: operation failed

1、安装composer需要开启openssl拓展 而phpstudy默认是关闭的

2、将php目录下的ssleay32.dll,libeay32.dll以及php/ext文件夹下的:php_openssl.dll 3个文件拷贝到WINDOWSsystem32 文件夹下。

3、openssl需要CA证书 phpstudy也是没有的

CA证书下载地址:http://curl.haxx.se/docs/caextract.html

选中之后单击右键选择另存为

下载成功之后放到tmp文件夹下面

4、然后修改php.ini文件

openssl.cafile = "D:phpStudy	mpcacert.pem"

5、重启phpStudy就可以了报错提示:

1 failed to open stream: HTTP request failed!

1、检查一下php的curl拓展是否开启

2、检查这两个配置是否开启。

allow_url_fopen =On
user_agent="PHP"

也可以这样配置 user_agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)")

模拟浏览器访问也是一个不错的选择

3、开启之后重启重启phpStudy就可以了

PS: openssl.cafile 配置选项, 是 PHP 5.6.0. 以上的版本才支持的

免责声明:文章转载自《Composer依赖管理 – PHP的利器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇uswgiPython3 中 configparser 使用注意事项下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Yii2.0 用户登录详解(上)

一、准备 在开始编写代码之前,我们需要思考一下:用户登陆模块,实现的是什么功能?很明显,是登陆功能,那么,登陆需要用户名和密码,我们在数据库的一张表中就应该准备好用户名和密码的字段,再思考一下,如果要实现自动登陆的功能,那么还需要什么?Cookie,是专门用于自动登陆的,所以,我们的数据表可能需要准备一个字段,专门用于储存客户端登陆所生成的cookie,这...

laravel 安装 Laravel 扩展包

问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档的: composer update这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害。 因为composer update的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是所有扩展包,举个例子,你在项目一开始的时...

php session存进去,取不出来

目录 一、检查 php.ini 二、查看 /var/tmp 是否有读写权限 ,如果没有: 三、检查 php-fpm 配置文件 四、重启 php-fpm 一、检查 php.ini vim /etc/php.ini 检查这几项: session.save_handler = files // session 的存储类型; session.auto_...

php的流处理

  工作中有这样一类场景,1、数据量很大,2、需要对数据进行实时的简单处理。例如:用户发布的消息会实时写入到message.txt文件中,写入的同时推送进mcq中(使用php脚本)。那么这个简单的功能就比较适合使用php的流的处理方式来实现。php://  是php中已经注册的URL风格的封装协议,用于访问各个输入/输出流(I/O streams)。 #...

PHP-数据库操作

连接数据库 PHP操作数据库的方式有多种如 mysql 、mysqli、PDO,目前主要使用的是PDO处理。 PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 下面是使用 PDO 连接数据库的操作,当连接失败时将抛出异常。 <?php header('Content-type:text/ht...

php实现获取文件mime类型的方法

本文实例讲述了php获取文件mime类型的方法。分享给大家供大家参考。具体如下: 1.使用 mime_content_type 方法 1 string mime_content_type ( string $filename) Returns the MIME content type for a file as determined by usi...