mac系統下切換php版本遇到的問題
阿新 • • 發佈:2018-12-03
問題:
mac下自帶php7.1,在/usr/bin下。但是需要用到php5.6。此時通過brew install php56成功安裝。但是,預設的還是php7.1,造成呼叫失敗。
解決方案:
設定預設php版本為php5.6
總結為一句話:在PATH中加入php5.6安裝路徑,並放在PATH的最前面。
心路歷程:
原文連結:點選開啟
需要切換版本原因
有一套老程式碼,沒有使用框架,裡面好多方法php7不支援,只能使用php5.6
- 1
正常切換流程
brew services php71 stop brew unlink php71 brew link php56 brew services php56 start
- 1
- 2
- 3
- 4
遇到的問題
1. brew services php56 start啟動不起來fpm
解決方案:解除安裝重灌
- 1
2. brew uninstall php56 提示“Uninstalling /usr/local/Cellar/php56/5.6.30_6… (284 files, 15.2MB)Error: Directory not empty @ dir_s_rmdir - /usr/local/Cellar/php56/5.6.30_6
解決方案: cd /usr/local/Cellar/php56/5.6.30_6 sudo rm -rf * #重新安裝 brew install php56
- 1
- 2
- 3
- 4
- 5
- 6
3. 安裝完php5.6後,執行brew link php56,報錯
這個報錯感覺死迴圈了。。。
解決方案:我的目的就是啟動fpm,既然php5.6已經安裝上了,我自己手動啟動fpm就是了
cd /usr/local/opt/[email protected]/sbin
php-fpm -y /usr/local/etc/php/5.6/php-fpm.conf
- 1
- 2
- 3
4. 高高興興測試程式,結果方法還是無法使用,使用phpinfo()檢視,PHP版本7.1.7
解決方案:
剛開始以為是php.ini的問題,使用
php-fpm -y /usr/local/etc/php/5.6/php-fpm.conf -c /usr/local/etc/php/5.6/php.ini
重新啟動php-fpm,發現php版本依然沒變;突然感覺php版本應該與php.ini配置檔案無關,而應該與php執行檔案或者是zend虛擬機器有關。
然後檢視/usr/local/opt/ [email protected]/bin下有php執行程式,執行./php -v,發現版本為5.6.35,感覺問題應該就解決了
which php查看了系統預設php命令位置:/usr/bin/php;
ls -l /usr/bin/php
該檔案不是軟鏈
執行 sudo mv /usr/bin/php /usr/bin/php-7.1.7結果提示mv: rename php to php-7.1.7: Operation not permitted
網上查詢原因:為了防止系統被入侵,mac系統部分資料夾無寫許可權
如果需要修改,需要重啟按住 Command+R,進入恢復模式,開啟Terminal,執行:csrutil disable(恢復的話,同樣方式進入,執行:csrutil enable)
感覺每次切版本都要修改這玩意兒,太變態了,不行。
突然想到,為什麼要改呢,我讓/usr/local/opt/[email protected]/bin路徑,在環境變數中的位置比/usr/bin靠前就好了呀
檢視~/.zshrc(zsh resource檔案,bash對應檔案~/.bashrc),在檔案末尾新增
export PATH="/usr/local/opt/[email protected]/bin:$PATH"(ps:這命令在前面錯誤截圖上有過提示,但是執行了也是一樣繼續出錯誤)
儲存退出後,執行
source ~/.zshrc
然後重啟fpm
php-fpm -y /usr/local/etc/php/5.6/php-fpm.conf
檢視php版本,yes~~~問題解決
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
思考(後續繼續查詢原因,困死。。)
1. 為什麼好好的環境就會突然失效呢
2. 為什麼預設PHP版本是7.1.7 而/usr/local/opt/php71/bin下,執行./php -v 版本為7.1.13
3. brew的link,unlink都做了哪些操作,可以使php版本進行切換,而我自己修改卻需要進入恢復模式(難道7.1.7是系統自帶的,因為brew也沒有許可權切換了,導致環境失效?)
4. 突然又發現,切換為brew安裝的php7,頁面上phpinfo中版本為7.1.13,why。。。。
- 1
- 2
- 3
- 4
臨時php切換方案
php7->php5:
1. brew services php71 stop
2. 修改~/.zshrc,新增環境變數
3. source ~/.zshrc
4. /usr/local/etc/php/5.6/sbin/php-fpm -y /usr/local/etc/php/5.6/php-fpm.conf
php5->php7:
1. 修改~/.zshrc,刪除無用環境變數
2. 新開啟終端
3. brew services php71 start