本來是那 Sublime Text 3
跑幾個例子, 結果安裝一個格式化插件 phpfmt
之後保存時總提示當前的PHP版本過低, 要你升級, 想着升級就升級唄, 於是就被帶進坑裏去了…
PHP升級
Mac好像是自帶了PHP了, 版本號查詢: php -v
# 查詢php版本號
$ php -v
PHP 5.5.38 (cli) (built: Oct 29 2017 20:49:07)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
PHP5
和 PHP7
是兩個差別很大的版本, 其中不同自行網上查找
說是升級, 其實是重新安裝一個, 源碼安裝就麻煩一點, 這裏有個簡單點的:
# 安裝PHP7, 最後是大的版本號
curl -s http://php-osx.liip.ch/install.sh | bash -s 7.2
最後安裝的目錄是: /usr/local/php5-7.2.2-20180201-132629
額~~, 好吧, 爲什麼是 php5-7.2.2
這個樣子…
而且安裝完之後, 應該是有個 /usr/local/php5
的鏈接指向了 /usr/local/php5-7.2.2-20180201-132629
猜測是PHP好多地方應該都是指向的 /usr/local/php5
目錄
$ ll /usr/local/
drwxr-xr-x 15 root wheel 510B 4 12 19:31 php5-7.2.2-20180201-132629
lrwxr-xr-x 1 xuyinglong wheel 37B 4 12 18:48 php5 -> /usr/local/php5-7.2.2-20180201-132629
# 查看安裝後的版本號
$ /usr/local/php5-7.2.2-20180201-132629/bin/php -v
PHP 7.2.2 (cli) (built: Feb 1 2018 13:23:34) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.2, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans
看起來沒問題, 然後再來個偷樑換柱, 把 /usr/bin/php
替換成我們最新的
# 查找位置
$ whereis php
/usr/bin/php
# 先備份
$ sudo /usr/bin/php /usr/bin/php5.5
# 創建一個鏈接, 類似window下面的快捷方式
$ sudo ln -s /usr/local/php5-7.2.2-20180201-132629/bin/php /usr/bin/php
然後 php -v
就可以看到是 7.2.2 版本了
跑個PHP例子
經典的當然是:test.php
<?php phpinfo(); ?>
額, 話說直接可是跑不起來的, 把這段配置到 nginx
裏, 然後重啓 sudo nginx -s reload
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
include fastcgi_params;
}
上面的 test.php
放到 nginx
安裝目錄下的 html
文件夾下, 然後瀏覽器裏訪問:http://localhost/test.php
如果幸運的話, 你就能看到 PHP 相關的版本和配置等信息了
等等, 是不是忘記啓動 php-fpm
了, 現在的 PHP
都是帶 php-fpm
的 (PHP5.3.3之後自帶改模塊了), 額, 這是個什麼, 你還是看文末的參考吧
直接執行 php-fpm
好像是提示沒有配置文件吧, 而 /etc
和 /private/etc
目錄下都有 php-fpm.conf
文件, 那麼就指定一個吧
$ php-fpm --fpm-config /private/etc/php-fpm.conf
額, 繼續報錯, 提示 /usr/var/log/php-fpm.log
目錄不存在, 好吧, 這裏修改一下路徑
$ vim /private/etc/php-fpm.conf
# 修改錯誤日誌文件路徑, 目錄不存在可以手動創建一下 mkdir -p /usr/local/log
error_log = /usr/local/log/php-fpm.log
好, 再次運行就成功了
於是我們再次刷新瀏覽器的 http://localhost/test.php
鏈接, 可以看到PHP相關的額信息, 可是版本號和控制檯的不對啊…
控制檯和Web端版本號不一致
額, 這個問題網上查了好多資料… 最終還是老外靠譜 大致內容:
php -v
- 控制檯命令, 表示php的版本號phpinfo()
- 這個是通過Web服務器查看到的PHP信息重點
- Web服務器是通過php-fpm
關聯到php的, 而php-fpm
指向的 php 纔是頁面展示的信息; 而php
和php-fpm
總是一對一的, 自己版本找自己對應的搭檔就好了
上面是看人家討論 Apache
的 php5_module
模塊按不同 php
版本來對應配置所想到的
解決方案
搞明白怎麼回事就好解決問題了, 來看看:
$ php-fpm -v
PHP 5.5.38 (fpm-fcgi) (built: Oct 29 2017 20:49:27)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
在把 php-fpm
給換成最新的
# 查找位置
$ whereis php-fpm
/usr/sbin/php-fpm
# 備份
$ sudo mv /usr/sbin/php-fpm /usr/sbin/php-fpm5.5
# 創建一個鏈接
$ sudo ln -s /usr/local/php5-7.2.2-20180201-132629/sbin/php-fpm /usr/sbin/php-fpm
再次執行 php-fpm -v
可以看到是最新的 7.2.2 版本的了, 瀏覽器刷新應該可以看到都是最新的 7.2.2 版本的了
(忘記是否需要重啓nginx了)
後話
nginx
: 記住 php -v
和 php-fpm -v
應該是一對的, 要換應該一起換
apache
: 同樣, 如果安裝了多個版本的php, 那麼 php5_module
模塊也需要對應
最後 Sublime Text 3
裏面自動就好使了