Homestesd中更換PHP版本後,PECL安裝擴充套件遇到的PHP版本問題

myhui0926發表於2020-10-20

這兩天想把homestead的執行環境改成PHP7.4,試試PHP7.4新加的特性。大家都知道PHP的執行模式目前主要有兩種,php-fpm模式和cli模式。
laravel的佇列、定時任務等都是在cli模式下執行的,而且我們使用pecl安裝PHP擴充套件(swoole,redis)的時候會用到phpize,這些功能特性都依賴PHP的cli執行環境。今天在切換cli執行環境下的PHP版本的時候就踩到坑了,寫出來分享給大家,希望能夠為大家節省時間。
我們更改homestead的PHP版本時,要分別更改fpm和cli兩種執行模式下的PHP版本:

  • 方式一:直接改nginx配置檔案
    php-fpm模式的PHP版本變更很簡單,只要將nginx與php-fpm的通訊socket改成php-7.4.socket,然後重啟nginx就行:
    nginx配置
  • 方式二:修改Homestead.yaml檔案
    sites:
      - map: zztms.test
        to: /home/vagrant/code/zztms/public
        php: "7.4"

很多教程都是使用兩個命令即可:

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版本完整的步驟如下

  • 切換cli執行模式預設的PHP版本:
    sudo update-alternatives --config php
    選擇PHP7.4即可
  • 切換phpize版本:
    sudo update-alternatives --config phpize
    選擇7.4版本
  • 切換php-config版本

    sudo update-alternatives --config php-config

    同樣選擇7.4版本

  • 切換phpdbg版本

    sudo update-alternatives --config phpdbg

    同樣選擇7.4版本

  • 現在重新看一下跟php有關的環境變數:

    ls -lha /etc/alternatives | grep php

    執行結果
    執行結果顯示,所有php相關環境變數都變成7.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

編譯完成後,將 extension=swoole.so 新增到swoole.ini檔案:

sudo vim /etc/php/7.4/mods-available/swoole.ini
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 協議》,轉載必須註明作者和本文連結
順勢而為

相關文章