解决Homestesd中更换PHP版本后,PECL安装扩展遇到的PHP版本问题

这两天想把homestead的PHP版本改成7.4,试试PHP7.4新加的特性。大家都知道PHP的运行模式目前主要有两种,php-fpm模式和cli模式。
而我们使用pecl安装PHP扩展(例如swoole,redis)的时候会用到phpize,依赖PHP的cli运行环境。今天在切换cli运行环境下的PHP版本的时候就踩到坑了,写出来分享给大家,希望能够为大家节省时间。
我们更改homestead的PHP版本时,要分别更改fpm和cli两种运行模式下的PHP版本:

php-fpm模式更改PHP版本

  • 方式一:直接改nginx配置文件
    fpm模式的PHP版本变更很简单,只要将nginx与php-fpm的通讯socket改成php-7.4.sock,然后重启nginx就行:
    nginx配置
  • 方式二:修改Homestead.yaml文件
    sites:
      - map: zztms.test
        to: /home/vagrant/code/zztms/public
        php: "7.4"

CLI执行环境的PHP版本切换。

很多教程都是使用两个命令即可:

update-alternatives --display php //查看所有 php 版本和当前版本
update-alternatives --config php //执行后,会列出当前 php 所有版本和编号,输入编号,切换到执行的版本

假设我把PHP版本从7.3切换成了7.4,是否可以直接通过pecl安装PHP扩展了呢,没那么简单!(需要直接正确更改PHP版本的直接跳到最后看步骤)。现在我要使用pecl安装swoole扩展,直接执行命令:

pecl install swoole

然后发现编译采用的api版本依然是php7.3的:

376 source files, building
running: phpize
Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731

这当然不行了。直接 Ctrl + C 结束安装。

其实主要问题出在PHP编译环境上,编译环境默认还是php7.3的。所以除了切换PHP本身的版本,PHP扩展的编译环境也要相应切换。

所以更换CLI运行模式下的PHP版本完整的步骤如下

  1. 切换cli运行模式默认的PHP版本:
    sudo update-alternatives --config php
    选择PHP7.4即可
  1. 切换phpize版本:
    sudo update-alternatives --config phpize
    选择7.4版本
  1. 切换php-config版本

    sudo update-alternatives --config php-config

    同样选择7.4版本

  2. 切换phpdbg版本

    sudo update-alternatives --config phpdbg

    同样选择7.4版本

  3. 现在重新看一下跟php有关的环境变量:

    ls -lha /etc/alternatives | grep php

    运行结果
    运行结果显示,所有php相关环境变量都变成7.4版本的了。

  4. 现在重新运行pecl安装扩展命令:

    sudo pecl install swoole

    可以看到,此时编译安装扩展采用的api变成PHP7.4的了:

    376 source files, building
    running: phpize
    Configuring for:
    PHP Api Version:         20190902
    Zend Module Api No:      20190902
    Zend Extension Api No:   320190902
  5. 编译完成后,将 extension=swoole.so 添加到swoole.ini文件:

  • 创建配置文件:
    sudo vim /etc/php/7.4/mods-available/swoole.ini
  • 写入配置:
    extension=swoole.so
  • 通过软链接启用配置:
    sudo ln -s /etc/php/7.4/mods-available/swoole.ini /etc/php/7.4/cli/conf.d/20-swoole.ini
  • 现在运行:
    php -m | grep swoole
    可以看到扩展已安装成功了。
本作品采用《CC 协议》,转载必须注明作者和本文链接
顺势而为
本帖由系统于 3个月前 自动加精
myhui0926
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2

已收藏,说不定下次用上了

10个月前 评论

安装7.4用了多久 :confused:

8个月前 评论
myhui0926 (楼主) 8个月前

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