首页 > 编程语言 >PHP兼容性检测

PHP兼容性检测

时间:2022-12-07 18:44:26浏览次数:50  
标签:bin 兼容性 检测 phpcs PHPCompatibility path PHP php

根据鸟哥分享的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,或者把扫描范围设置更小些,比如只扫描某个目录,而不是整个项目!

 

标签:bin,兼容性,检测,phpcs,PHPCompatibility,path,PHP,php
From: https://www.cnblogs.com/xiaoxiaobug/p/16937952.html

相关文章

  • PHP 自定义 数组根据键去重
    去重前$result=$this->unique_array_by_key($result,"id");functionunique_array_by_key($array,$unique_key){$tmp_key[]=array();forea......
  • yolov3/4 转换为caffemodel 并且验证检测图片功能 简单记录遇到的一个问题
    过程需要设计github上的caffe、darknet2caffe、caffe-yolov3等资源,具体编译安装过程可以参考网络上的其他资源。注意这个过程有一个很关键的地方,就是caffe-yolov3的实现是......
  • PHP加密代码及部分解密处理
    PHP是动态解析型语言即代码不需要编译运行,因不利于代码保密所以在一些商业或黑客会将代码进行加密处理,尽可能的保护知识产权,是一种合理合法的做法。特别说明:以下解密思路及......
  • 建造者模式(描述语言PHP)
    Builder模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说Builder模式中对象不是直接返回的。 <?php/***建造者模式**将一个复杂......
  • 解决vscode中在js文件中报ts检测提示
    1.遇到的问题vscode中在js文件中报ts检测语法提示2.解决方法在设置中查找validate找到Typescript设置,将JavaScript>Validate:enable设置为禁用,或者在setti......
  • 前端学习之------检测数组中的id,在对象数组中是否存在?
    1、数组为:2、对象数组为:3、检测arr中的id,在objArr中是否存在? ......
  • PHP扩展 Opcache工作原理
    PHP工作原理首先,我们先了解下解释型语言PHP的工作原理,这有利于我们了解PHPOpcache。对于PHP,我们常用的是cli模式和php-fpm模式。下面我们拿cli模式来描述下php执行脚本......
  • 在线视力检测标准和方法 All In One
    在线视力检测标准和方法AllInOneZEISSOnlineVisionScreeninghttps://visionscreening.zeiss.com/zh-cn该在线视力筛查是对当前视觉感官的初步检查,并非医疗测试......
  • php-fpm进程过多,导致CPU过高
    今天发现服务器的php-fpm进程突然过多,导致CPU过高,其他项目的访问受到影响。我通过以下三个基本步骤定位到了问题,发现了其原因。 基本步骤:先用top命令查看进程情况,找出......
  • php的pdo库使用总结
    <?phptry{$dsn="mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8";$user="root";$password="";#持久连接$pdo=newPDO($ds......