Homestead 中有多个 PHP 版本,如何切换版本?

vagrant@homestead:/etc/php$ ls
5.6  7.0  7.1

/etc/php下有多个php版本的目录,一般默认使用的是最高版本的php。那么剩下的版本留在这里我猜测是为了给用户自己来切换版本使用的?
那么在homestead中如何切换到低版本php上?比如切换到php5.6

还有在切换的时候需要注意什么? Thinks

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

@七月羽歌 谢谢回复。这个问题目前新版本的homestead已经提供配置支持

    - map: wd.com
      to: /home/vagrant/code/qianlong_sys
      php: "5.6"
    - map: admin.kd.do
      to: /home/vagrant/code/yii2_admin/backend/web
      php: "7.1"
5年前 评论
讨论数量: 13

@七月羽歌 谢谢回复。这个问题目前新版本的homestead已经提供配置支持

    - map: wd.com
      to: /home/vagrant/code/qianlong_sys
      php: "5.6"
    - map: admin.kd.do
      to: /home/vagrant/code/yii2_admin/backend/web
      php: "7.1"
5年前 评论

同问啊,我也在纠结这个问题。自带7.1想切换到5.6去。。。

6年前 评论

同样的问题,楼主是否解决?

6年前 评论

@Chaly 没有。 目前在用高版本的

6年前 评论

Homestead.yaml 配置

通常, cd ~/Homestead 进入到 Homestead配置目录,编辑(vim Homestead.yaml),增加或删除站点。比如:

folders:
    - map: ~/Code/work
      to: /home/vagrant/work/
    - map: ~/Code/study
      to: /home/vagrant/study/

sites:
    - map: larabbs.com
      to: /home/vagrant/study/larabbs/public
    - map: mlxiu.com
      to: /home/vagrant/work/mlxiu.com

这个配置是第一步。

找到 php.ini 还有 nginx

先找存在的 php 版本

php -i|grep php.ini
# /etc/php/7.2/cli/php.ini 可以看到是这里
cd /etc/php
ls
# 你会发现这里有 **5.6  7.0  7.1  7.2** 四个大版本的 php

再来看看 nginx,因为缘起还是 nginx 来配置。

cd /etc/nginx/
cd sites-available
# 当然,可以一步到位 cd /etc/nginx/sites-available
ls
# 你会看到这里有两个文件,文件名就是 Homestead.yaml 中配置的域名
# 这里是 larabbs.com , mlxiu.com 这两个文件

假如想将 larabbs.com 这个站点使用的 php 版本切换到 5.6, 只需要修改 larabbs.com 配置。

location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

修改后,保存。
创建测试文件,在 larabbs/public 下新建 t.php

cd ~/study/larabbs/public
vim t.php
# 输入 <?php phpinfo(); 保存,待重启后使用

重启 homestead

vagrant provison
vagrant reload
vagrant ssh

本地访问: http://larabbs.com/t.php,就会看到 php 的版本了。也许,你已经看到 php 的版本已经到 5.6 了。可是有坑。

有坑

当你几个站点的 php 版本不一样时,关闭 homestead,再启动时,就会有错误。
关掉 homestead,再进入时,你会发现一个 502 Bad Gateway 的错误。

# 操作
exit
vagrant halt
vagrant up

/var/run/php/ 目录下,也根本没有 php5.6-fpm.sock 。然后,想重启 php-fpm

/etc/init.d/php-fpm5.6 restart
# 发现只会重启失败

那么,那么,将所有站点的 php 版本都配置成 一样 的 就不会出现问题。暂时,配置的 php 最高版本是 7.2,最低是 5.6 。

5年前 评论
PHPer技术栈 3年前
七月羽歌 (作者) 3年前
PHPer技术栈 3年前
七月羽歌 (作者) 3年前

@七月羽歌 谢谢回复。这个问题目前新版本的homestead已经提供配置支持

    - map: wd.com
      to: /home/vagrant/code/qianlong_sys
      php: "5.6"
    - map: admin.kd.do
      to: /home/vagrant/code/yii2_admin/backend/web
      php: "7.1"
5年前 评论

@keer 这样好啊。免得好傻的去配置。

5年前 评论

@keer 你好,更新了盒子,现在是6.1版本,但是像你在配置文件里指定版本,重启配置,好像不生效呢?还是默认最新的

5年前 评论

@gaoxiang vagrant reload --provision

5年前 评论

@keer 执行了,打印phpinfo(); 还是7.1

file

5年前 评论

@gaoxiang 我的box也是6.1的 这样配置没什么问题。 还真不知道哪里有问题了。

5年前 评论

@keer 我之前是3.0的,后面单独更新了box ,不知道是不是其他的vagrant 什么的也要更新呢?

5年前 评论

@gaoxiang 哥们,你怎么解决的?我和你一样的问题,指定版本没用

file

file

5年前 评论

Homestead 中自带了版本管理工具

在Homestead 目录下有个 aliases 文件,这个文件定义了一些可以直接在虚拟机中使用的命令,其中就有切换php版本的命令
file

比如切换php版本直接输入php73就行,切换后即时生效

还有一种方式:
执行update-alternatives –config php 会列出当前 php 所有版本和编号,输入编号,会切换到执行的版本,记得以管理员权限来执行

Laravel

附赠查看所有 php 版本和当前版本
update-alternatives –display php

Laravel

如果不是全局修改只修改当前站点可以通过Homestead.yaml文件配置来修改,修改后记得重启下配置,vagrant.exe reload –provision
file

2年前 评论
thinkabel 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!