我可以建议 2 种不同的方法:Composer 和 PHP CompatInfo。
作曲家
对于安装了依赖的 Composer 项目,可以使用命令查看需求
composer check-platform-reqs
注意它不分析代码,它只检查来自composer.lock文件的信息
或 vendor 目录中的文件,以存在者为准。
结果示例:
composer-plugin-api 1.1.0 success
ext-ctype 7.2.24 success
ext-curl 7.2.24 success
ext-dom 20031129 success
ext-zip n/a phpoffice/phpspreadsheet requires ext-zip (*) missing
php 7.2.24 success
软件包的开发者应该在composer.json 的require 部分中包含有关所需PHP 扩展的信息,
例如"ext-curl": "*".
显然,这种方法的有效性很大程度上取决于开发人员的守时
但此检查快速且易于使用。
PHP 兼容性信息
最新版本和开发文档可以在here找到。
可以找到最终用户文档
here,
你也可以从那里下载一个 PHAR 文件,但它可能已经过时了
(目前它托管版本 5.0.12,而 GitHub 和 Packagist 拥有 5.4.2)。
安装此库的推荐方法是通过 Composer。
我建议单独安装它,而不是在您要测试的项目中,因为:
- PHP CompatInfo 还需要一些 PHP 扩展并且您想测试自己的项目
无需添加额外的依赖项。
- PHP CompatInfo 可能需要与您的项目冲突的软件包版本,
例如5.4.2 版需要
symfony/config: ^4.4|^5.0,如果您的项目已经需要symfony/config: ^3.0
那么您无法安装最新版本的 PHP CompatInfo 作为该项目的一部分,
即使您的系统可能允许这样做。
在您要测试的项目之外运行:
-
composer create-project bartlett/php-compatinfo - 此命令将安装 PHP CompatInfo
及其所有依赖项,包括开发依赖项,然后构建一个 PHAR 文件。
如果您在安装开发依赖项时遇到问题,您可以忽略它们
composer create-project --no-dev --no-scripts bartlett/php-compatinfo,
在这种情况下,PHAR 文件也不会被构建,但无论如何都不是必需的。
-
cd php-compatinfo
composer run post-install-cmd - 此命令将构建 PHP CompatInfo 需要的 SQLite 数据库。此操作不应该在生产环境中执行!如果你想在生产环境中运行 PHP CompatInfo,那么你应该查看它的文档。
-
./bin/phpcompatinfo analyser:run --progress ../path/to/project - 此命令将分析代码
并且可能会产生巨大的报告,但开头应该是这样的:
Extensions Analysis
Extension REF EXT min/Max PHP min/Max
Core Core 5.1.0 5.1.0
json json 5.2.0 5.2.0
C mongo mongo 0.9.0 5.0.0
pcre pcre 4.0.0 4.0.0
session session 4.0.0 4.0.0
standard standard 5.2.3 5.2.3
Total [6] 5.2.3
有关详细信息,请参阅上述文档和内置帮助:
-
帮助消息
./php-compatinfo/bin/phpcompatinfo --help
-
列出可用的命令
./php-compatinfo/bin/phpcompatinfo list
-
关于命令的帮助信息
./php-compatinfo/bin/phpcompatinfo analyser:run --help
疑难解答
PHP CompatInfo 无法解析无效的 PHP 代码,所以如果你在分析过程中得到了 Fatal error
那么这可能就是原因。
一些包可能包含带有错误 PHP 代码的测试文件,这些代码从未执行但用于测试,
这种包的例子是squizlabs/php_codesniffer。
我建议暂时删除整个包或仅删除其测试,以避免分析过程中出错。
结果解读
PHP CompatInfo 可能会产生假阳性和假阴性结果。
假阴性示例:库可以检测到你的项目使用了PDO,但无法检测是否使用
与pdo_mysql 或pdo_pgsql 驱动程序或其他东西。虽然我打赌你知道你使用的是哪个数据库。
误报示例:一些 PHP 框架和库可能包含与众多服务一起使用的类
出于相同的目的。
例如,Yii 2 框架有类可以使用APC、APCu、memcache、memcached 和XCache。
PHP CompatInfo 将列出所有这些扩展,但这并不意味着它们真的在项目中使用,
你必须弄清楚自己。
图像处理 PHP 扩展 GD、Gmagick 和 Imagick 以及其他扩展也可能出现同样的情况。