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
不向後兼容的變更的檢查
檢查 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:傳統部署:部署新服,業務流量切過去,原有服暫時不要銷燬,等業務沒問題後再慢慢銷燬原有服, 如果是雲平臺應該爲所有將要銷燬的系統做一個快照以備不時之需