這兩天想把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就行: - 方式二:修改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版本:
選擇PHP7.4即可sudo update-alternatives --config php
- 切換phpize版本:
選擇7.4版本sudo update-alternatives --config phpize
切換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 協議》,轉載必須註明作者和本文連結