作者: houlijiang

  • Composer 的安装

    Wondows 平台

    Wondows 平台上,我们只需要下载 Composer-Setup.exe 后,一步步安装即可。

    需要注意的是你需要开启 openssl 配置,我们打开 php 目录下的 php.ini,将 extension=php_openssl.dll 前面的分号去掉就可以了。

    安装成功后,我们可以通过命令窗口(cmd) 输入 composer –version 命令来查看是否安装成功:

    接下来我们可以更改阿里云 Composer 全量镜像:

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

    取消配置:

    composer config -g --unset repos.packagist

    项目配置

    仅修改当前工程配置,仅当前工程可使用该镜像地址:

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

    取消配置:

    composer config --unset repos.packagist

    调试

    composer 命令增加 -vvv 可输出详细的信息,命令如下:

    composer -vvv require alibabacloud/sdk

    遇到问题?

    1. 建议先将Composer版本升级到最新:

    composer self-update

    2. 执行诊断命令:

    composer diagnose

    3. 清除缓存:

    composer clear

    4. 若项目之前已通过其他源安装,则需要更新 composer.lock 文件,执行命令:

    composer update --lock

    5. 重试一次

    Linux 平台

    Linux 平台可以使用以下命令来安装:

    # php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
    # php composer-setup.php
    
    All settings correct for using Composer
    Downloading...
    
    Composer (version 1.6.5) successfully installed to: /root/composer.phar
    Use it: php composer.phar

    移动 composer.phar,这样 composer 就可以进行全局调用:

    # mv composer.phar /usr/local/bin/composer

    切换为国内镜像:

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

    更新 composer:

    # composer selfupdate

    Mac OS 系统

    Mac OS 系统可以使用以下命令来安装:

    $ curl -sS https://getcomposer.org/installer | php
    $ sudo mv composer.phar /usr/local/bin/composer
    $ composer --version
    Composer version 1.7.2 2018-08-16 16:57:12

    切换为国内镜像:

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

    更新 composer:

    $ composer selfupdate

    Composer 的使用

    要使用 Composer,我们需要先在项目的目录下创建一个 composer.json 文件,文件描述了项目的依赖关系。

    文件格式如下:

    {
        "require": {
            "monolog/monolog": "1.2.*"
        }
    }

    以上文件说明我们需要下载从 1.2 开始的任何版本的 monolog。

    接下来只要运行以下命令即可安装依赖包:

    composer install

    require 命令

    除了使用 install 命令外,我们也可以使用 require 命令快速的安装一个依赖而不需要手动在 composer.json 里添加依赖信息:

    $ composer require monolog/monolog

    Composer 会先找到合适的版本,然后更新composer.json文件,在 require 那添加 monolog/monolog 包的相关信息,再把相关的依赖下载下来进行安装,最后更新 composer.lock 文件并生成 php 的自动加载文件。

    update 命令

    update 命令用于更新项目里所有的包,或者指定的某些包:

    # 更新所有依赖
    $ composer update
    
    # 更新指定的包
    $ composer update monolog/monolog
    
    # 更新指定的多个包
    $ composer update monolog/monolog symfony/dependency-injection
    
    # 还可以通过通配符匹配包
    $ composer update monolog/monolog symfony/*

    需要注意的时,包能升级的版本会受到版本约束的约束,包不会升级到超出约束的版本的范围。例如如果 composer.json 里包的版本约束为 ^1.10,而最新版本为 2.0。那么 update 命令是不能把包升级到 2.0 版本的,只能最高升级到 1.x 版本。关于版本约束请看后面的介绍。

    remove 命令

    remove 命令用于移除一个包及其依赖(在依赖没有被其他包使用的情况下),如果依赖被其他包使用,则无法移除:

    $ composer remove monolog/monolog
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Package operations: 0 installs, 0 updates, 2 removals
      - Removing psr/log (1.0.2)
      - Removing monolog/monolog (1.23.0)
    Generating autoload files

    search 命令

    search 命令可以搜索包:

    $ composer search monolog

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

    $ composer search --only-name monolog

    show 命令

    show 命令可以列出当前项目使用到包的信息:

    # 列出所有已经安装的包
    $ composer show
    
    # 可以通过通配符进行筛选
    $ composer show monolog/*
    
    # 显示具体某个包的信息
    $ composer show monolog/monolog

    基本约束

    精确版本

    我们可以告诉 Composer 安装的具体版本,例如:1.0.2,指定 1.0.2 版本。

    范围

    通过使用比较操作符来指定包的范围。这些操作符包括:>,>=,<,<=,!=

    你可以定义多个范围,使用空格或者逗号 , 表示逻辑上的与,使用双竖线 || 表示逻辑上的或。其中与的优先级会大于或。 实例:

    • >=1.0
    • >=1.0 <2.0
    • >=1.0 <1.1 || >=1.2

    我们也可以通过使用连字符  来指定版本范围。

    连字符的左边表明了 >= 的版本,如果右边的版本不是完整的版本号,则会被使用通配符进行补全。例如1.0 - 2.0等同于>=1.0.0 <2.12.0相当于2.0.*),而1.0.0 - 2.1.0则等同于>=1.0.0 <=2.1.0

    通配符

    可以使用通配符来设置版本。1.0.*相当于>=1.0 <1.1
    例子:1.0.*

    波浪号 ~

    我们先通过后面这个例子去解释~操作符的用法:~1.2相当于>=1.2 <2.0.0,而~1.2.3相当于>=1.2.3 <1.3.0。对于使用Semantic Versioning作为版本号标准的项目来说,这种版本约束方式很实用。例如~1.2定义了最小的小版本号,然后你可以升级2.0以下的任何版本而不会出问题,因为按照Semantic Versioning的版本定义,小版本的升级不应该有兼容性的问题。简单来说,~定义了最小的版本,并且允许版本的最后一位版本号进行升级(没懂得话,请再看一边前面的例子)。
    例子:~1.2

    需要注意的是,如果~作用在主版本号上,例如~1,按照上面的说法,Composer可以安装版本1以后的主版本,但是事实上是~1会被当作~1.0对待,只能增加小版本,不能增加主版本。

    折音号 ^

    ^操作符的行为跟Semantic Versioning有比较大的关联,它允许升级版本到安全的版本。例如,^1.2.3相当于>=1.2.3 <2.0.0,因为在2.0版本前的版本应该都没有兼容性的问题。而对于1.0之前的版本,这种约束方式也考虑到了安全问题,例如^0.3会被当作>=0.3.0 <0.4.0对待。
    例子:^1.2.3


    版本稳定性

    如果你没有显式的指定版本的稳定性,Composer会根据使用的操作符,默认在内部指定为-dev或者-stable。例如:

    约束 内部约束
    1.2.3 =1.2.3.0-stable
    >1.2 >1.2.0.0-stable
    >=1.2 >=1.2.0.0-dev
    >=1.2-stable >=1.2.0.0-stable
    <1.3 <1.3.0.0-dev
    <=1.3 <=1.3.0.0-stable
    1 - 2 >=1.0.0.0-dev <3.0.0.0-dev
    ~1.3 >=1.3.0.0-dev <2.0.0.0-dev
    1.4.* >=1.4.0.0-dev <1.5.0.0-dev

    例子:1.0 - 2.0如果你想指定版本只要稳定版本,你可以在版本后面添加后缀-stable

    minimum-stability 配置项定义了包在选择版本时对稳定性的选择的默认行为。默认是stable。它的值如下(按照稳定性排序):devalphabetaRCstable。除了修改这个配置去修改这个默认行为,我们还可以通过稳定性标识(例如@stable@dev)来安装一个相比于默认配置不同稳定性的版本。例如:

    {
        "require": {
            "monolog/monolog": "1.0.*@beta",
            "acme/foo": "@dev"
        }
    }
  • windows 查看端口占用

    netstat -aon|findstr "8081"
    
    taskkill /f /t /im TIM.exe
    结束进程:
    
    taskkill /T /F /PID 9088 

    1、开始—->运行—->cmd,或者是window+R组合键,调出命令窗口:

    2、输入命令:netstat -ano,列出所有端口的情况。在列表中我们观察被占用的端口,比如是8080,首先找到它:

    3、查看被占用端口对应的PID,输入命令:netstat -aon|findstr “8080”,回车,记下最后一位数字,即PID,这里是2668。

    4、继续输入tasklist|findstr “2668”,回车,查看是哪个进程或者程序占用了2668端口,结果是:TIM.exe

    5、或者是我们打开任务管理器,点击查看—>选择列,将PID(进程标示符)前面的勾打上,点击确定。

    切换到进程选项卡,在PID一列查看2668对应的进程,如下图:

    6、结束该进程:在任务管理器中选中该进程点击”结束进程“按钮,或者是在cmd的命令窗口中输入:taskkill /f /t /im TIM.exe

    注:后两步可以使用任务管理器,因为看的比较直观而且方便。

  • docker 开启远程访问

    netsh interface portproxy add v4tov4 listenport=2375 connectaddress=127.0.0.1 connectport=2375 listenaddress=【your-public-ip】 protocol=tcp

  • “git pull” 如何强制覆盖本地文件

    git checkout master
    git branch new-branch-to-save-current-commits
    git fetch --all
    git reset --hard origin/master

    重要提示:如果您有任何本地更改,将会丢失。无论是否有–hard选项,任何未被推送的本地提交都将丢失。
    如果您有任何未被Git跟踪的文件(例如上传的用户内容),这些文件将不会受到影响。
    下面是正确的方法

    git fetch --all
    

    然后,你有两个选择:

    git reset --hard origin/master
    

    或者如果你在其他分支上:

    git reset --hard origin/<branch_name>

  • Podman 快速入门

    今天在某云上新购一台云服务器,发现已经有了 CentOS8.2 官方镜像可选,出于对新鲜事物的好奇,我决定开始采用 CentOS8.2,即使我还没有为它的新特性做好准备。

    我的应用主要以单机版容器为主。因此,服务器启动的第一件事就是安装 Docker。不幸的事情发生了,我的 Docker 应用没有像 CentOS7 那样如期 running 起来。

    花了大量的时间排查,才找到一丝线索:CentOS8 以上的版本默认已经安装一个等同于 Docker的容器解决方案,这个就是Podman。

    两个容器解决在一起工作,相互打架的事情必然会发生。出于长治久安的考量,今天整个下午我展开了对 Podman 的研究,得到了如下的结论,希望这些结论能够让大家少走一点弯路。

    Podman 与 Docker 哪个好?

    对于这种问题,我想如何没有深刻的实践是一定无法得出结论的。就我个人来说,首先,刚开始学习的时候,我也尝试先从专业博客和论坛中寻找答案。

    我发现 Podman 中文相关的资料非常少,同理,评价它的博客就更少了,倒是有一篇非常吸人眼球的文章,例如:Docker 大势已去,Podman 万岁。但认真阅读它,却没有特别有价值的对比,完全是一种主观的表达。因此,我们不要被他人的文章所引导(误导)而形成一种偏见。

    Podman 是 RedHat 为了抢占容器标准的一种战略产品,这就是我的看法。

    Podman 兼容 Docker吗?

    大部分是兼容的,例如:

    1. 可以直接使用 Docker 镜像
    2. 命令非常相似

    如果你非常怀念 docker命令,甚至可以给 Podman 设置别名为 docker:

    echo "alias docker=podman" >> .bashrc
    source .bashrc
    

    Podman 镜像

    默认镜像库

    文件 /etc/containers/registries.conf 是设置镜像地址配置文件,默认会搜索 [‘registry.access.redhat.com’, ‘registry.redhat.io’, ‘docker.io’, ‘quay.io’]
    等几个镜像库。

    不过,这几个镜像库下载速度非常慢,可以说是基本无法顺利的将镜像拉下来。

    所以,需要修改修改镜像库配置文件,也就是大家说的镜像加速方案。

    镜像加速

    只需2个步骤实现镜像加速:

    1. 改名并备份好文件:/etc/containers/registries.conf
    2. 再新建一个空的 registries.conf 文件,插入如下内容unqualified-search-registries = ["docker.io"] [[registry]] prefix = "docker.io" location = "******.mirror.aliyuncs.com"
    3. 修改 location
    4. 保存

    Podman Compose

    Podman Compose 等同于 Docker Compose,是用于固化容器运行参数以及协调容器之间的关系的一种较为简单的方案。

    使用如下的命令,安装 Podman Compose,并根据自己的喜好设置别名(如果仍然忘不了 docker)

    pip3 install podman-compose
    echo "alias docker-compose=podman-compose" >> .bashrc
    source .bashrc
    

    Podman 外网

    如果以普通用户运行容器,此容器默认无法被外网访问,为了避免不必要的麻烦,建议以root用户创建并运行容器。

    另外,run 容器的时候,请勿使用 -p 0.0.0.0:9090:80 这种端口映射方式,它会导致容器无法被外网访问。如果采用正常的端口映射方式 -p :9090:80,就没有任何问题。

    #无法被外网访问
    sudo podman run --name phpmyadmin  --restart=always  -itd  -p 0.0.0.0:9090:80  -e PMA_HOST=10.88.0.1  phpmyadmin/phpmyadmin
    
    #可以被外网访问
    sudo podman run --name phpmyadmin  --restart=always  -itd  -p 9090:80  -e PMA_HOST=10.88.0.1  phpmyadmin/phpmyadmin
    

    标签

  • 英文1-12月

    1、Jan. January 一月;

    2、Feb. February 二月;

    3、Mar. March 三月;

    4、Apr. April 四月;

    5、May无缩写 五月;

    6、Jun. June 六月;

    7、Jul. July 七月;

    8、Aug. August 八月;

    9、Sep. September九月;

    10、Oct. October 十月;

    11、Nov. November 十一月;

    12、Dec. December 十二月。

  • linux git版本更新

    安装 centos7 WANDisco 仓库

    yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm

    2,安装 Git
    yum -y install git
    3,版本验证
    git version
    centos7 安装快捷复制
    yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
    yum -y install git
    git version

    yum install nss

  • git diff 换行符问题

    这是由于换行符在不同的操作系统上定义的区别造成的。

    Windows用CR LF来定义换行,Linux用LF。

    CR全称是Carriage Return ,或者表示为\r, 意思是回车。

    LF全称是Line Feed,它才是真正意义上的换行表示符。

    如果用git diff的时候看到^M字符,就说明两个文件在换行符上有所差别。
    ————————————————
    版权声明:本文为CSDN博主「1_2_3ad」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/nanyilou_xiaoye/article/details/79075092

    git config --global core.whitespace cr-at-eol
  • 关于zip压缩包日志查询、统计、导出

    gzip -dc   catalina20190416.out.tar.gz | grep –binary-files=text -1 ‘下单验价’ –color

    使用zgrep命令可以在压缩文件中调用grep按正则表达式来搜索

    语法格式

    zgrep [参数] [模式] [文件名]

    常用参数:

    -x 被排除在处理归档成员的可选列表中

    参考实例

    在压缩文件/a.zip中搜索字符a:

    [root@linux265 ~]# zgrep a /root/a.zip
    

    在服务器压缩的日志文件中查找关键词GET /blog

    zgrep 'GET /blog' access_log1.gz access_log2.gz
  • idea terminal 中文乱码

    解决方案:

    1.首先找到IDEA在本地的安装路径,找到idea.exe.vmoptions文件和idea64.exe.vmoptions文件,在其最后一行添加

    -Dfile.encoding=UTF-8

    export LANG=”zh_CN.UTF-8″
    export LC_ALL=”zh_CN.UTF-8″