linux下安装composer

php composer linux 安装 编程技术
发布日期 2022-11-23 更新日期 2024-11-14 阅读次数 146 文章字数 4.1k

安装预知

在linux下,安装composer,需要php环境,并且需要 PHP 5.3.2+ 以上版本,且需要开启 openssl(高版本自带默认开启)

查看当前php版本

php -v

可以设置新的临时环境变量,比如php80

export PATH=/www/server/php/80/bin:$PATH

下载安装

1.下载安装脚本  composer-setup.php  到当前目录。

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

2.执行安装过程

php composer-setup.php

3.删除安装脚本

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

4.安装完成后会有composer.phar文件,运行php composer.phar就可以查看composer,也可以直接使用 composer 命令,因为一般会自动安装到 /usr/bin/composer,使用命令查看composer版本

composer --version

这个 composer.char,虽然是一个phar包,不过它在头部带了 #!/usr/bin/env php(也就是它会自动引用环境变量里的php,这就是这个phar文件能运行的原因),直接使用composer命令就相当于复制了一份phar文件(准确来说并不是复制,只是类似,代码基本是一样的,功能也相同)【对比composer文件和phar文件内容即可证明】

--伪代码
cp composer.phar /usr/bin/composer

升级与卸载

使用命令升级

composer self-update

卸载composer,前面也说过了,composer的原理就是复制了一份phar文件,那么使用 which composer 即可查看到所在位置,删除使用 rm 即可

rm $(which composer)

切换源

更换国内源

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

或阿里云源

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

官方源

composer config -g repo.packagist composer https://repo.packagist.org

其他源

腾讯:https://mirrors.cloud.tencent.com/composer/

删除代理源

composer config -g --unset repos.packagist

如果不使用 -g 参数,则仅对当前项目生效。

使用Composer

一般我们就是使用 composer 进行依赖的管理,常见的功能就是增删改查依赖包

在使用 composer 命令时,首先它会检测当然目录,是否存在 composer.json 文件,如果不存在依次检测上级目录,如果上级目录有 composer.json,那么应该新建一个 composer.json,内容为空的json对象{}即可,保存这个文件【或者composer init,效果是一样的】,此时在拉取时,会生成一个 composer.lock 文件,以及 vendor 目录,lock文件是冲突锁定文件,vender是拉取的依赖所在目录

尝试拉取一个项目

--普通安装
composer require xxx/xxx
--强制安装
composer require phpoffice/phpspreadsheet --ignore-platform-reqs
--安装指定版本,软件包:版本号
composer require "illuminate/redis:5.5.*"
composer require "predis/predis:^1.1"
composer require "foo/bar:1.0.0"

参数说明

--ignore-platform-reqs: ignore all platform requirements (php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill these. See also the platform config option

忽略所有平台要求(php,hhvm,lib- *和ext- *)并强制安装,即使本地计算机不满足这些要求(此参数可选)

查看当前已经安装的依赖包:

composer show

搜索网络包

composer search 包名

该命令会输出包及其描述信息,如果只想输出包名可以使用 --only-name 参数:

composer search --only-name 包名

卸载某个依赖包:

composer remove vendorName/packageName

例如

composer remove monolog/monolog

更新依赖包

更新所有(根据json文件和lock文件,所以这两个文件必须存在,应该加入到版本库里)
composer update
更新指定的包
composer update monolog/monolog
更新指定的多个包
composer update monolog/monolog symfony/dependency-injection
还可以通过通配符匹配包
composer update monolog/monolog symfony/*

关于Composer开发

psr是一个composer规范,当你在使用composer init创建时,它在生成json文件时,可能如下

{
    "name": "aaa/bbb",
    "autoload": {
        "psr-4": {
            "Aaa\\Bbb\\": "src/"
        }
    },
    "authors": [
        {
            "name": "abc"
        }
    ],
    "minimum-stability": "1.0.0",
    "require": {}
}

name表示包名,authors作者,mini-stability是最低使用的稳定版本号,require是指外部的依赖或环境,那么autoload是指自动加载的规则,默认情况下使用psr-4,其实就算你不符合psr规范,依然是可以加载的

psr4几点关键点

PSR-4中,在类名中使用下划线没有任何特殊含义。【而PSR-0则规定类名中的下划线_会被转化成目录分隔符。】

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

完全限定的类名必须有一个顶级命名空间名称,也称为“供应商命名空间”。

完全限定类名可以有一个或多个子命名空间名称。

完全限定类名必须具有终止类名。

 完全限定类名中的字母字符可以是小写和大写的任意组合。

所有类名都必须以区分大小写的方式引用。

终止类名对应于以.php结尾的文件名。文件名必须与终止类名的大小写匹配。

自动加载器实现不得抛出异常,不得引发任何级别的错误,也不应返回值。

简单来说,就是大小写严格命名空间结构对应目录结构,这和我们平时写法也是基本一致的。

说到底,这个psr-4规范,就只是和普通写法基本没区别,因为正常我们也是这么写的。

psr-4实现类似如下

<?php
/**
 * 一个具体项目的实例
 * 
 * 当使用 SPL 注册此自动加载器后,执行以下语句将从 
 * /path/to/project/src/Baz/Qux.php 载入 \Foo\Bar\Baz\Qux 类:
 * 
 *      new \Foo\Bar\Baz\Qux;
 *      
 * @param string $class 完整的类名
 * @return void
 */
spl_autoload_register(function ($class) {
    
    // 具体项目命名空间前缀
    $prefix = 'Foo\\Bar\\';

    // 命名空间前缀的基目录
    $base_dir = __DIR__ . '/src/';
    
    // 判断类名是否具有本命名空间前缀
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        // 不含本命名空间前缀,退出本自动载入器
        return;
    }
    
    // 截取相应类名
    $relative_class = substr($class, $len);
    
    // 将命名空间前缀替作为文件基目录,然后
    // 将类名中的命名空间分隔符替换成文件分隔符,
    // 最后添加 .php 后缀
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
    
    // 如果以上文件存在,则将其载入
    if (file_exists($file)) {
        require $file;
    }
});

 当然了,上面只是伪代码,查看vendor里的composer,我们发现它并不是那么简单,而是有缓存的

如果没有HHVM【正常情况下】,它是加载 autoload_static.php 里的getInitializer方法绑定 prefixLengthsPsr4、prefixDirsPsr4、classMap三个数组,及其自动加载 $files 里的文件

这四个大概如下作用

prefixLengthsPsr4 数组,是对全类名的第一个字母的分类,以及记录其全类名长度,

prefixDirsPsr4 记录的是完整的类名,及其所在目录对应关系

classMap 是普通的类名及其路径【不符合psr-4规范】

files 更简单了,就是载入一下普通的php文件,相当于 require 一次,比如有时候写一些简单的函数或类,总之是引入没有命名空间的php文件。

对应在composer.json文件里,就是三个内容,比如

"autoload": {
  "classmap": ["othsrc/","classsrc.php"],
  "files": ["othsrc/filesrc.php"],
  "psr-4": {"Foo\Bar\": "src"}  }

如果自己手动增删改了一些内容,那么先更新composer.json的autoload,接下来还要更新这些缓存,否则composer无法识别,这个命令是

composer dump-autoload

它能重新识别,并更新 autoload_static.php 里的数据,这样才能够使用。

发布在线composer项目?

自己注册composer官方网站的账号,这样就可以提交github的地址,也就是说需要先提交到github,公开仓库,此时我们得到 github 的 https 地址

在composer官网,提交这个 https 地址即可,官方网址:https://packagist.org/


文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-206.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

php composer linux 安装

发表评论

相关推荐
朱丰华   |   7个月前   |   php

php判断是否被iframe

221    评论    点赞
朱丰华   |   1年前   |   linux · upx

Linux下安装UPX

406    评论    点赞
朱丰华   |   1年前   |   linux

linux保持后台进程不被关闭nohup &

254    评论    点赞
朱丰华   |   1年前   |   php

php正则表达式定界符:异常Delimiter must not be alphanumeric or backslash

190    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

172    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

198    评论    点赞
朱丰华   |   1年前   |   go · gopath

Go自定义包并安装(GOPATH)

118    评论    点赞
朱丰华   |   1年前   |   编译 · linux · 平台

Go 交叉编译 (跨平台编译)

173    评论    点赞
朱丰华   |   1年前   |   正则 · 表达

正则表达式,实现if...then...else

113    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

115    评论    点赞
朱丰华   |   1年前   |   linux · 内容

linux环境下,对于一个大文件,如何查看其中某行的内容

69    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 字符串

如何在 PHP 中将字符串的第一个字母转换为大写

150    评论    点赞
朱丰华   |   1年前   |   linux · 文件 · 行数

linux 取得文件行数

50    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 正则

php正则表达式原生字符

86    评论    点赞
朱丰华   |   1年前   |   字符 · php · 比较

PHP比较字符串大小相关函数

111    评论    点赞
朱丰华   |   1年前   |   文件 · linux · 修改

linux文件的三个时间atime,mtime,ctime分别表示什么?

275    评论    点赞
朱丰华   |   1年前   |   linux · 文件 · 统计

linux递归统计文件夹下的文件数量

166    评论    点赞
朱丰华   |   1年前   |   linux · 文件

linux递归统计文件夹大小、du命令_Linux du命令:查看文件夹和文件的磁盘占用情况

193    评论    点赞
朱丰华   |   1年前   |   php

windows下编写、编译php扩展

158    评论    点赞
朱丰华   |   1年前   |   linux · php

linux下编写、编译php扩展

150    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞