分类 composer 下的文章

CentOS 7.6 安装 composer 报错: SSL routines:tls_process_server_certificate:certificate verify failed

前言

想在新服务器上跑一个 Laravel 项目,默认需要安装 composer 库管理工具。

系统: Linux release 7.6.1810 (Core)
php: 7.3.3
下载来源站:https://getcomposer.org/download/

命令行安装步骤:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

但是,在第一步从来源站 copy 安装脚本的时候就报错了:
copy()... OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in Command line code

解决

百度找不到好的解决方案,求助 Google。找到这样一篇:OpenSSL Failed to enable crypto #6870,里面提到的解决方案:

Fixed by disable Kaspersky Antivirus

意思是关闭卡巴斯基防病毒进程。我的主机上是肯定没有安装这个东西的,猜想是不是防火墙在搞事情。

检查防火墙状态(centos7 高版本对 iptables 做了优化更新,把 iptables 服务改成了 firewalld

service firewalld status

防火墙并未开启(inactive)。在同一讨论问题中发现了另一个解决方案:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed #3346

方案摘抄如下:

First: Check certificate file location which will be in default_cert_file key, you will found it in openssl_get_cert_locations() its php openssl function:

$ php -r "print_r(openssl_get_cert_locations());"
Array
(
    [default_cert_file] => /opt/lampp/share/openssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /opt/lampp/share/openssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /opt/lampp/share/openssl/private
    [default_default_cert_area] => /opt/lampp/share/openssl
    [ini_cafile] => 
    [ini_capath] => 
)
Second: Download http://curl.haxx.se/ca/cacert.pem:

$ wget http://curl.haxx.se/ca/cacert.pem
Third: Copy certificate PEM file into default_cert_file location:

$ sudo mv cacert.pem /opt/lampp/share/openssl/cert.pem
My php-cli is under XAMPP and default_cert_file maybe point to some place that is different than this.
I hope anything after that should goes fine with you brothers.

按照他步骤进行,解决。

大致原因是 openssl 默认的证书不存在,验证失败。下载一个第三方提供的证书,放到配置目录下就好了。

在 CI 中使用 composer 安装的依赖包

本文针对 Linux 系统,windows 第一步 根据 composer 官网进行安装 后面的步骤相同

本文参考来自:栁罗风尘 - CSDN
废话不多说

step 1  全局安装 composer

$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer

step 2  创建 composer.json 到你的项目根目录

{
    "require": {
        "kriswallsmith/buzz": "*"
    }
}

这里将添加一个 Buzz package, 用来处理 HTTP Request / Response PHP 5.3.x 类.

或者直接用 composer 创建项目
composer create-project codeigniter/framework test

step 3  执行如下命令 下载依赖包

$ composer install
之后你会注意到 composer 创建了一个 ./vendors 在你的应用目录里 而且代码也在里面.

step 4 在项目中添加包的自动加载

加上下面一行在你的 index.php

require_once './vendor/autoload.php';
需要加载在
require_once BASEPATH.'core/CodeIgniter.php'; 前面

或者需要修改 application/config/config.php
$config['composer_autoload'] = 'vendor/autoload.php';

step 5 测试

例子如下:

class Test extends CI_Controller
{
    public function index()
    {
        $browser = new Buzz\Browser();
        $response = $browser->get('http://www.baidu.com');

        echo $browser->getLastRequest()."\n";
        echo $response;
    }
}

查看更多可用包可以查看 Packagist

Composer 扩展包 安装方法

composer install,composer update,composer require 傻傻分不清?

简单解释:
composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;
composer update - 从 composer.json 安装最新扩展包和依赖;
composer update vendor/package - 从 composer.json 或者对应包的配置,并更新到最新;
composer require new/package - 添加安装 new/package, 可以指定版本,如: composer require new/package ~2.5.

详细说明:正确的 Composer 扩展包安装方法

【转】深入 Composer autoload

这几天看到 phphub 上面有人开始进坑怒看 laravel 源代码,于是我也凑个热闹来看下这个故事。

众所周知 composer 是现代 PHP 项目的基石, 与古老的 pear 不同, composer 并不是一款专注于系统级别 php 管理的包管理系统,而是基于项目的一个库管理系统。这就好比 npm install -gnpm install 的区别。而且最主要的是 pear 不太能跟上时代的潮流,在大家都在用 psr-* 的时候 pear 依然我行我素自成一体。

好吧,可能这是好事,但是也是坏事。好事是很多优秀的包都从 pear 发家致富,比如 PHP_CodeSniffer, PHP_Unit 等等。但是随着时代的发展,php社区也渐渐地从其他社区汲取到了一些精华,慢慢地向前发展。最近的 laravel 就是直接扔进了 composer。因为 psr-4 这个规范真是不能再爽更多。这真的是我用各种包用得最顺手的一套命名规范了。

扯远了,扯回 vendor/composer/autoload_real.php 这个核心 composer 文件。

自动加载的类型

总体来说 composer 提供了几种自动加载类型

  • classmap
  • psr-0
  • psr-4
  • files

这几种自动加载都会用到,理论上来说,项目代码用 psr-4 自动加载, helper 用 files 自动加载,development 相关用 classmap 自动加载。 psr-0 已经被抛弃了,不过有些历史遗留依然在用,所以偶尔也会看到。

classmap

- 阅读剩余部分 -

composer 修改镜像源

国内几个镜像源

composer config -g repo.packagist composer https://packagist.composer-proxy.org
composer config -g repo.packagist composer https://p.staticq.com 
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer config -g repo.packagist composer https://packagist.laravel-china.org

配置只在当前项目生效

composer config repo.packagist composer https://packagist.phpcomposer.com
#取消当前项目配置
composer config --unset repos.packagist

配置全局生效

composer config -g repo.packagist composer https://packagist.phpcomposer.com
#取消全局配置
composer config -g --unset repos.packagist

使用第三方软件快速修改、切换 composer 镜像源

crm => composer registry manager

#安装 crm
composer global require slince/composer-registry-manager

#列出当前可用的所有镜像源
composer repo:ls

    composer ---------  https://packagist.org
    phpcomposer ------  https://packagist.phpcomposer.com
    composer-proxy ---  https://packagist.composer-proxy.org
    laravel-china ----  https://packagist.laravel-china.org

#使用 phpcomposer 镜像源
composer repo:use phpcomposer

参考:Composer 国内加速,修改镜像源