windows 环境下多个版本 php 下使用 composer 冲突问题
在尝试安装 FastAdmin 时,碰到了以下问题:
win10@win10 MINGW64 /e/PhpStudy20180211/PHPTutorial/WWW/fastadmin (master)
$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- endroid/qr-code 1.9.3 requires ext-gd * -> the requested PHP extension gd is missing from your system.
- endroid/qr-code 1.9.2 requires ext-gd * -> the requested PHP extension gd is missing from your system.
- endroid/qr-code 1.9.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
- endroid/qr-code 1.9.0 requires ext-gd * -> the requested PHP extension gd is missing from your system.
- Installation request for endroid/qr-code ^1.9 -> satisfiable by endroid/qr-code[1.9.0, 1.9.1, 1.9.2, 1.9.3].
To enable extensions, verify that they are enabled in your .ini files:
- E:\PhpStudy20180211\PHPTutorial\php\php-7.0.12-nts\php.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
很明显,这里产生了错误,提示 qr-code 需要 php 的 gd 扩展。
但是
,细看之下发现另一个问题,使用的 php 版本是 php-7.0.12 ,但是我目前实际开发中,使用的是 php-7.1.13 。
这是为什么呢?
原因是 composer 引用了 php 全局环境变量,我这里 win 10 设置的全局环境变量 php 命中路径就是指定到旧版本 php-7.0.12,而非实际开发的目前版本 php-7.1.13 ,这种情况下如何处理?
当然,个人觉得这种多 php 版本混合的开发本身就比较麻烦的,应该利用 Docker 工具的。
前提
:
- 破话原有的环境。【建立在原有环境不重要的情况下】
只要去修改原有的 windows 全局 php 环境变量即可。
网上还看到一种说法是重装 composer ,应该是指在 linux 下这样操作。 - 不破话原有的环境。【这才是正常的操作,一般如果电脑部署了多版本 php ,最好是不影响原有的环境,保不准到时候产生一个隐性 bug】
如何在多版本的情况下使用 composer 而互不干扰呢?
解决
:
先去 composer 官网 下载 composer.phar
这个文件,这是 php归档文件包 。先放到某个地方,我是放在本地服务器根目录 E:\PhpStudy20180211\PHPTutorial\WWW
下的,然后进入你的本地服务器根目录调用这个 composer.phar
。操作演示如下:
PS C:\Users\win10> cd E:\PhpStudy20180211\PHPTutorial\WWW
PS E:\PhpStudy20180211\PHPTutorial\WWW>
PS E:\PhpStudy20180211\PHPTutorial\WWW> E:\PhpStudy20180211\PHPTutorial\php\php-7.1.13-nts\php.exe .\composer.phar -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.10.6 2020-05-06 10:28:10
可以看到已经输出了下载的 composer
版本。
这是属于一次性的调用,因为没有环境变量的支持,后面如果要再次使用 php-7.1.13
版本的时候,依然需要 composer 和想要调用的 php 版本全路径。而原来使用 php 环境,依然按照原来的全局命令 composer ,互不干扰。
这里举个例子,安装 thinkphp 6:
PS E:\PhpStudy20180211\PHPTutorial\WWW> E:\PhpStudy20180211\PHPTutorial\php\php-7.1.13-nts\php.exe .\composer.phar create-project topthink/think=6.0.x-dev tp
其格式含义大致如下:
PS 项目目录(你想要在哪个目录下实行composer)> php版本目录路径(你想要调用的php版本) composer目录路径(你想要单独调用的composer.phar) composer命令(你想要composer帮你完成的事情)
那最开始的问题如何解决呢?在你确认该 php 开启了 gd 库的情况下,如下操作:
win10@win10 MINGW64 /e/PhpStudy20180211/PHPTutorial/WWW/fastadmin (master)
$ E:\\PhpStudy20180211\\PHPTutorial\\php\\php-7.1.13-nts\\php.exe \
> E:\\PhpStudy20180211\\PHPTutorial\\WWW\\composer.phar \
> install
这里解释一下,路径里包含双 \\
是因为在 git Console 应用里 \
被解析成转义字符。可以使用并且也推荐路径分隔符采纳为 /
更通用。路径最后面的 \
是属于换行符,代表一段语句太长换到下一行输入,这里这样使用主要是因为输入过长会导致字符顺序混乱。