根据鸟哥分享的PHP性能评测,从PHP5.0到PHP7.0,其性能提升到了12倍左右,因此把PHP5升级到PHP7,是可以提升项目运行速度的。

PHP5到PHP7是大版本的提升,一定会出现不向后兼容的情况!所以升级之前,先检查PHP的兼容性。

面对一个项目,可能你不熟悉某些代码,甚至不熟悉这个项目,不熟悉这个框架等。

虽然PHP的官方手册已经列出相应的不向后兼容性,但基本不可能人为的根据这些特性去检查,既不科学,效率也不高!

可以选择使用PHPCompatibility/PHPCompatibility来检测项目。

安装

这个工具的使用依赖于另外一个包squizlabs/PHP_CodeSniffer,也就是常用于检测PHP代码是否符合PSR规范的包。

当前的PHPCompatibility最新版是9.3.5,查看该版本的composer依赖,要求php_codesniffer包在^2.3 || ^3.0.2。

目前php_codesniffer包,最新的是3.7.1,满足要求。

可以通过composer下载这个包,下载成功后,对应的工具命令就在vendor/bin/phpcs。

这里就不通过composer方式,而是直接下载phar包,然后放到本地的php命令目录下作为一个备用命令。

以下出现的php-path表示本地的php目录路径。

[root@localhost resource]# wget https://github.com/squizlabs/PHP_CodeSniffer/releases/download/3.7.1/phpcs.phar
[root@localhost resource]# mv ./phpcs.phar php-path/bin/phpcs
# 赋予一个执行权限
[root@localhost resource]# chmod u+x php-path/bin/phpcs
# 直接执行phpcs命令,前提是系统有php命令;此时还没有PHPCompatibility
[root@localhost resource]# php-path/bin/phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz and Zend

安装好php_codesniffer之后,就可以安装PHPCompatibility了。

可以下载它的压缩包,或者通过composer下载到一个独立目录:composer create-project phpcompatibility/php-compatibility:9.3.5 xx-path(如:./php-compatibility) -vvv。

如果是composer require方式,则会下载到指定项目的vendor中,这里我选择create-project方式,让它单独存在某个目录下就好,或者下载压缩包,解压到某个目录下也一样!

# 要保证php-compatibility-path/PHPCompatibility/下存在Sniffs目录;同时这里最好添加一个绝对路径,否则可能导致添加无效!
[root@localhost resource]# php-path/bin/phpcs --config-set installed_paths php-compatibility-path/PHPCompatibility/
# 添加成功,就可以看到PHPCompatibility关键字
[root@localhost resource]# php-path/bin/phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz, Zend and PHPCompatibility

检测

安装好PHPCompatibility就可以去检测代码的PHP兼容性了。

检测命令php-path/bin/phpcs -p 代码位置 –standard=PHPCompatibility –runtime-set testVersion PHP的版本(可以是某个范围,如7.1-7.2)。

也可以通过–report-full=扫描结果文件,来保存扫描结果。

检测例子:

原本跑在PHP5.6上的Thinkphp3.2项目,如果用PHP7.2跑,会出现哪些不兼容?

执行php-path/bin/phpcs -p 代码位置 –standard=PHPCompatibility –runtime-set testVersion 7.2。

可以看到,类似:

—————————————————————————————————-
FOUND 17 ERRORS AFFECTING 16 LINES
—————————————————————————————————-
  63 | ERROR | Extension ‘mysql_’ is deprecated since PHP 5.5 and removed since PHP 7.0; Use mysqli
     |       | instead

之类的检测输出!

有了检测结果,就可以对应代码去修改兼容性了!

问题

检测的时候,会逐个扫描PHP文件,可能出现内存不足的错误:

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 4194312 bytes) in phar:///php-path/phpcs/src/Fixer.php on line 3

这个时候可以修改php.ini中的memory_limit = xxM,或者把扫描范围设置更小些,比如只扫描某个目录,而不是整个项目!

 

版权声明:本文为xiaoxiaobug原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiaoxiaobug/p/16937952.html