sstalle / php7cc
用于检查 PHP 5.3 - 5.6 代码与 PHP 7 兼容性的命令行工具
Requires
- php: >=5.3.3
- bcncommerce/json-stream: 0.3.0
- nikic/php-parser: ~1.4
- pimple/pimple: ~3.0
- symfony/console: ~2.3 || ~3.0
- symfony/finder: ~2.3 || ~3.0
Requires (Dev)
- fabpot/php-cs-fixer: ~1.10
- mikey179/vfsstream: ~1.5
- phpunit/phpunit: 4.7.*
README
项目状态
该项目不再受支持。请考虑使用以下替代方案之一
简介
php7cc 是一个命令行工具,旨在简化从 PHP 5.3-5.6 迁移到 PHP 7 的过程。它会在现有代码中搜索可能引起问题的语句,并生成包含文件名、行号和简短问题描述的报告。它不会自动修复代码以与新版本的 PHP 兼容。
它检测哪些类型的问题?
php7cc 报告了两种类型的问题
- 错误 在 PHP 7 上肯定会引起某种麻烦(如致命错误、语法错误、警告等)。这些用红色突出显示。
- 警告 可能或可能不会导致逻辑错误。例如,在 PHP 5 和 PHP 7 中都合法,但版本之间行为改变的语句属于此类。警告用黄色突出显示。
可能导致错误或警告的报告的语句列表可以在 php-src 存储库 中找到。
尽管 php7cc 尽可能准确地检测尽可能多的问题,但有时要实现 100% 的可靠检测非常困难。这就是为什么您也应该为您打算迁移的代码运行全面的测试套件。
先决条件
要运行 php7cc,您需要安装 PHP,最低版本要求为 5.3.3。PHP 7 支持,但包含语法错误的文件(例如,无效的数字字面量或无效的 UTF-8 代码点转义序列)无法处理。对于此类文件,您将只收到关于第一个语法错误的警告消息。
您可能还需要 composer 来安装 php7cc。
安装
Phar 包
您可以从 Github 发行版 页面下载任何稳定版本的 phar 包。
Composer(全局)
请确保您已安装 composer。然后执行以下命令
composer global require sstalle/php7cc
还建议将全局 Composer 二进制目录添加到您的 PATH
环境变量中。此目录的位置取决于您使用的操作系统(如果您想了解更多,请参阅 Composer 文档)。以下命令适用于某些 *nix 系统
export PATH="$PATH:$HOME/.config/composer/vendor/bin"
这使得仅通过输入可执行文件名称即可运行php7cc。
Composer(本地,每个项目)
请确保您已安装composer。然后从您的项目目录执行以下命令
composer require sstalle/php7cc --dev
Docker镜像
在Docker Hub上有一个Docker镜像(由ypereirareis贡献和维护)。
使用方法
本节中的示例假设您已使用composer全局安装了php7cc,并且您已将其供应商二进制目录添加到您的PATH
中。如果不是这种情况,只需将php7cc
替换为phar包二进制文件的正确路径。对于本地每个项目的安装,可执行文件将位于<your_project_path>/vendor/bin/php7cc
。
获取帮助
要查看所有可用选项的完整列表,请运行
php7cc --help
检查单个文件或目录
要检查文件或目录,请将其名称作为第一个参数传递。目录将递归检查。
因此,要检查文件,您可以运行
php7cc /path/to/my/file.php
要检查目录
php7cc /path/to/my/directory/
指定要检查的文件扩展名
当检查目录时,您还可以指定一个逗号分隔的文件扩展名列表,这些扩展名应进行检查。默认情况下,仅处理.php文件。
例如,如果您想检查.php、.inc和.lib文件,则可以运行
php7cc --extensions=php,inc,lib /path/to/my/directory/
排除文件或目录
您可以指定一个要排除检查的绝对或相对路径列表。相对路径相对于检查的目录。
因此,如果您想排除vendor和test目录,则可以运行
php7cc --except=vendor --except=/path/to/my/directory/test /path/to/my/directory/
在此示例中,目录/path/to/my/directory/vendor
、/path/to/my/directory/test
及其内容将不会进行检查。
指定最小问题级别
如果您设置最小问题级别,则只有具有该级别或更高严重性的问题将由php7cc
报告。有3个问题级别:“info”、“warning”和“error”。“info”是供将来使用保留的,与“warning”相同。
示例用法
php7cc --level=error /path/to/my/directory/
在这种情况下,只会显示错误,而不会显示警告。
指定输出格式
有两种输出格式可用:plain
和json
。
output-format
命令行选项,简称o
,可用于更改输出格式
php7cc -o json /path/to/my/directory/ | json_pp
将输出
{ "summary" : { "elapsedTime" : 0.0060338973999023, "checkedFiles" : 3 }, "files" : [ { "errors" : {}, "name" : "/path/to/my/directory/myfile.php", "warnings" : [ { "text" : "String containing number in hexadecimal notation", "line" : 13 } ] }, { "warnings" : [ { "line" : 6, "text" : "Reserved name \"string\" used as a class, interface or trait name " } ], "name" : "/path/to/my/directory/myfile.php", "errors" : {} } ] }
故障排除
达到最大函数嵌套级别100/250/N,中止!
您应该在PHP或Xdebug配置文件中增加最大函数嵌套级别,如下所示
xdebug.max_nesting_level = 1000
N 字节允许的内存大小已耗尽
您应增加 CLI PHP 脚本可用的内存量或禁用 PHP 内存限制。可以通过将 memory_limit
PHP 选项设置为 -1 来执行后者。此选项可以通过编辑 php.ini
或通过向 PHP 可执行文件传递命令行参数来设置,如下所示
php -d memory_limit=-1 php7cc.php /path/to/my/directory
其他有用链接
贡献
请阅读 贡献指南。
鸣谢
贡献者列表可在相应的 Github 页面上找到。