因此,我有Gentoo盒安装了三个PHP版本(不管原因):
/usr/bin/php
-〉/usr/lib64/php5.4/bin/php
/usr/bin/php5.5
-〉/usr/lib64/php5.5/bin/php
/usr/bin/php5.6
-〉/usr/lib64/php5.4/bin/php
我想使用composer安装Laravel framework:
$ composer create-project laravel/laravel --prefer-dist
但是这会抛出一个错误,因为Laravel要求PHP〉5.5.9,而默认的php
解释器是5.4。
$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist
这使我更进一步,但是随后Laravel的composer.json
的一些安装后命令开始起作用,安装崩溃。
这是由于composer.json
命令如下所示:
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
正如您所看到的,"默认"解释器再次被使用!
现在,正确的PHP文件开始与以下shebang:
#!/usr/bin/env php
这是一个很好的特性,因为PHP解释器可以在不同系统的不同位置找到。不幸的是,在这种情况下,env
命令返回的路径到它在$PATH
环境变量中找到的第一个可执行文件。
我怎么可能改变当前的会话环境,或者执行什么样的技巧来执行整个Laravel安装过程php
命令将调用/usr/bin/php5.6
而不是/usr/bin/php
?
我不想更改$PATH
变量或修改composer
、composer.json
或Laravel的CLI实用程序artisan
等文件。
编辑:还假设我想从普通用户帐户(即没有root权限)执行此操作。
9条答案
按热度按时间vdgimpew1#
我使用了"脚本+docker映像"来在开发过程中随时提供多个PHP版本:https://github.com/jclaveau/docker-php-multiversion
您可以按以下方式使用它:
由于它使用www.example.com,因此您不需要更改系统配置的任何部分。Docker.io, you do not need to alter any part of your system configuration.
希望能帮到你
vxbzzdmp2#
我对composer有这样的要求,它要求PHP在一个多租户系统上是一个特定的版本,这最终会影响其他Web应用程序。我不能更新整个系统的PHP符号链接,我需要切换PHP版本只为这个特定的执行,所以我结束了以下内容。
注意:只要你安装了不同版本的PHP,它就可以正常工作。
d8tt03nd3#
默认PHP可执行文件可以使用以下命令找到:
在大多数情况下,它是链接到特定的PHP版本:
要将其更改为其他版本,只需将其重新链接到另一个版本
在重新链接之前,你必须确保目标PHP版本已经安装。
bvpmtnay4#
也许你可以尝试修复环境!
或者,如果您不想修改shell会话的PATH,您可以只对当前命令进行修改:
6kkfgxo05#
使用
which php
确定当前通用php
命令的位置及其指向的二进制文件。它将为您提供一个符号链接的路径,就像您在问题中提到的那样
/usr/bin/php -> /usr/lib64/php5.4/bin/php
编辑符号链接指向你现在想要的php版本,看这里https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks
当你完成后,只需颠倒这个过程。
UPDATE:您还可以通过编辑
~/.bashrc
并添加以下内容来为当前用户添加alias
alias php='/usr/bin/php5.6'
看看这是否行得通
zvms9eto6#
自从PHP7出现以来,Debian Linux默认在/usr/bin中为PHP版本5和7创建不同的可执行文件(如果您安装了这两个版本)。
现在从命令行调用这些不同的版本和以前一样简单:
这显然只适用于简单的脚本,对于更大的脚本( composer 、工匠等),你必须改变PATH变量。
要更改Apache服务器正在使用的版本,您只需:
如果要使用较低的PHP版本,则反之亦然。
如果有人在Debian上有类似的问题,请提到它。
sycxhyv77#
我发现最简单的方法是创建一个软链接,例如
然后,当你使用你的默认版本说它是php7.2作为替代版本,你可以
php7
或php71
或php56
这里
ln -s /opt/php-7.1/bin/php /usr/bin/php71
是源/原始文件,/usr/bin/php7
是目标/链接cidc1ykv8#
对于那些在上面没有找到解决方案的人,因为他们使用
composer update
,不知何故使用了错误的PHP版本。通过使用composer self-update
,我得到了一些更多的信息,最终发现在composer.json
中,你可以在config
部分指定platform
,它覆盖了Composer使用的PHP版本。简单地更改这个值或删除这个配置就解决了我的问题。编写器.json
"config": { "platform": { "php": "7.1" },
ijxebb2r9#
可以使用
alias
来实现,但请记住,别名在默认情况下不会展开。您还必须启用这些扩展。