PHP版本兼容性检查

PHP版本兼容性检查,php,Php,我如何知道我的代码与该语言的哪个版本兼容?有没有办法找出哪种PHP语言的最低版本可以无误地执行它?可能有一些检查程序或函数、方法、类?很可能需要安装不同的PHP版本。然后,您可以使用shell检查代码与指定PHP版本的兼容性: find . -name *.php | xargs -n1 /usr/bin/php -l php-l命令以仅语法检查模式运行php。上面的命令将检查项目中的每个PHP文件与位于/usr/bin/PHP的PHP版本的兼容性。安装要测试的PHP版本并运行PHP-l fi

我如何知道我的代码与该语言的哪个版本兼容?有没有办法找出哪种PHP语言的最低版本可以无误地执行它?可能有一些检查程序或函数、方法、类?

很可能需要安装不同的PHP版本。然后,您可以使用shell检查代码与指定PHP版本的兼容性:

find . -name *.php | xargs -n1 /usr/bin/php -l

php-l
命令以仅语法检查模式运行php。上面的命令将检查项目中的每个PHP文件与位于/usr/bin/PHP的PHP版本的兼容性。

安装要测试的PHP版本并运行
PHP-l file.PHP
以测试文件是否通过lint检查。如果PHP无法解析文件,它会告诉您

通常,您应该知道哪些功能在哪个版本中可用。忽略PHP5.3及其几个补丁版本,这些补丁版本在一段时间内增加了显著的改进,这归结为了解PHP5.4、5.5、5.6和7.0带来了哪些功能,并在
composer.json
中明确指出该版本

提示:5.4具有短数组语法和特性,5.5具有生成器和
finally
,5.6具有可变函数和参数解包,7.0具有标量类型提示和返回类型。它有助于使用了解这些特性的IDE,并在您选择的版本中使用不受支持的内容时发出警告

PHP附带了一个常量
PHP\u VERSION
,其中包含您正在运行的当前版本,并具有一个函数
VERSION\u compare()
,以便于比较版本符号,如“哪个版本更大”。这将允许根据版本执行代码的不同部分,允许在较低版本上运行时为所需的某些内容添加兼容性层,并在较新版本上运行时使用PHP实现(通常更快)

除此之外,您总是会遇到未安装扩展的问题。这不是PHP版本本身的问题。PHP有
函数_exists()
方法_exists()
来检测您是否可以在调用之前调用某个函数(并因致命错误而失败)。您可以检测到这种错误情况,或者使用不同的解决方案,或者通知用户必须向PHP安装中添加一些内容

我建议在开源项目中使用Travis CI。基本上,您可以免费获得它,添加不同的PHP版本就像在travis.yml配置文件中添加新行一样。他们也提供私人存储库的计划。只要您在打算支持的所有PHP版本上运行代码,任何其他为您提供大量PHP版本的CI安装都可以正常工作

最后建议:放弃对PHP5.3和5.4的支持。这些版本已经停止维护(或者在两个月后只剩下安全性修复阶段),不应该再成为目标。

这个在线工具显示了150多个不同PHP版本(自4.3.0以来发布的每个版本)以及HHVM的代码输出


不确定这是否足以满足您的目的。

码头工人能够通过非常小的努力遵循建议:

docker run --rm -ti -v /path/to/your/app/src:/app php:8.0 bash
find /app -name '*.php' | xargs -n1 /usr/local/bin/php -l > /app/reportphp8
因此,
php:8.0
是一个可以从中获得的标记。通过更改此版本,您可以轻松检查应用程序与8.1/9.3/任何您想要的版本的兼容性

/path/to/your/app/src
是应用程序源根目录(仅包含应用程序源代码的目录,即Symfony中的
src/
dir和Laravel中的
app/
。这样做是为了防止检查
供应商的语法

报告将存储在名为
reportphp8
的应用程序根目录中

重要的
以上建议仅涉及语法,即它可以检测您是否使用已删除或不推荐的语言结构或核心函数。它无法检测您是否为已更改签名的函数提供了正确的类型,出于这些目的,使用静态分析器,如//。

也可能有一个最大版本的PHP语言,可以执行它而不会出错。好的,但是如何知道它的兼容性呢?要么你很了解你的代码,你将检查每个函数的PHP版本,要么你只需在几个服务器上运行语法检查,检查你想要的版本要确保兼容性,请立即使用localhost。是否有任何软件可以检查我的代码是否与任何版本兼容?或者您可以使用单个命令:
find-类型f-iname'*.php'-exec/usr/bin/php-l{}\抛出未知的主或运算符查找-名称“*.php”| xargs-n1/usr/bin/php-l在macI上工作,现在已经编写了类。有没有软件可以扫描它们并说您在本地主机上兼容或不兼容?正如我说的:在您想要检查的版本中安装PHP,并运行
PHP-l
命令以查看PHP是否可以解析它。