Php控制檯和phpinfo版本號不一致

本來是那 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 裏面自動就好使了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章