ThinkPHP3.2.3 運行環境從PHP5.4.x/PHP5.6.x升級到PHP7.0.x

 

2018-09-05 BY WWEK·0評論

使用工具來檢查項目代碼對PHP7的兼容情況

使用 PHP_CodeSniffer + PHPCompatibility
PHP_CodeSniffer
PHP_CodeSniffer對PHP,JavaScript和CSS文件進行標記,並檢測違反已定義的一組編碼標準的行爲。
https://github.com/squizlabs/PHP_CodeSniffer

PHPCompatibility
PHP兼容性檢查
https://github.com/PHPCompatibility/PHPCompatibility
更多PHPCompatibility相關內容,請參考 https://www.sitepoint.com/quick-intro-phpcompatibility-standard-for-phpcs-are-you-php7-ready/

安裝和運行

按照官方文檔進行安裝
先安裝PHP_CodeSniffer
再安裝插件PHPCompatibility

composer global require “squizlabs/php_codesniffer=*”
phpcs –config-set installed_paths /data/wwwroot/php/PHPCompatibility
phpcs –config-set installed_paths “D:\projects\php\PHPCompatibility”

查看是否安裝上
phpcs -i
#The installed coding standards are MySource, PEAR, PSR1, PSR12, PSR2, Squiz, Zend and PHPCompatibility
執行檢查
phpcs –standard=PHPCompatibility –runtime-set testVersion 7.0 /data/wwwroot/project/ >phpcs.log
#執行的過程會有些慢,慢慢等吧

根據phpcs.log中的日誌,解決error級別的錯誤

FILE: \data\wwwroot\project\Common\function.php

FOUND 3 ERRORS AFFECTING 2 LINES

9 | ERROR | Function split() is deprecated since PHP 5.3 and removed since PHP 7.0; Use preg_split() instead
11 | ERROR | Function eregi() is deprecated since PHP 5.3 and removed since PHP 7.0; Use preg_match() instead

11 | ERROR | Extension ‘ereg’ is deprecated since PHP 5.3 and removed since PHP 7.0; Use pcre instead

再加上手動按照PHP版本逐級檢查不兼容

PHP5.4.x 》 PHP5.6.x

從 PHP 5.4.x 遷移到 PHP 5.5.x

不向後兼容的變更的檢查
檢查 pack() 和 unpack() pass

PHP 5.5.x 中廢棄的特性的檢查
preg_replace() 函數中用到的 /e 修飾符現在被棄用。可以使用 preg_replace_callback() 函數來替代。
mcrypt 的相關函數

PHP 5.5.x 》 PHP5.6.x

從PHP 5.5.x 移植到 PHP 5.6.x
不向後兼容的變更的檢查
嚴格的 json_decode()

PHP 5.6.x 》 PHP7.0.x

從PHP 5.6.x 移植到 PHP 7.0.x
不向後兼容的變更的檢查
ereg相關函數
split()

測試

把主要業務功能都過一遍測試

升級部署問題

方式1:容器部署:php-fpm改用docker的方式部署,這樣比較方便多版本切換和回滾
方式2:傳統部署:部署新服,業務流量切過去,原有服暫時不要銷燬,等業務沒問題後再慢慢銷燬原有服, 如果是雲平臺應該爲所有將要銷燬的系統做一個快照以備不時之需

發佈了22 篇原創文章 · 獲贊 78 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章