afei/php7cc

一个命令行工具,用于检查PHP 5.3 - 5.6代码与PHP 7的兼容性

维护者

详细信息

github.com/kalaGN/php7cc

源代码

安装: 178

依赖者: 0

建议者: 0

安全: 0

星标: 5

关注者: 1

分支: 120

类型:项目

3.0.3 2019-12-03 13:34 UTC

This package is auto-updated.

Last update: 2024-09-29 05:35:46 UTC


README

简介

php7cc是一个命令行工具,旨在使从PHP 5.3-5.6迁移到PHP 7变得更加容易。它会在现有代码中搜索可能引起问题的语句,并生成包含文件名、行号和简短问题描述的报告。它不会自动修复代码以与新版本的PHP兼容。

它检测到哪些类型的问题?

php7cc报告了两种类型的问题

  1. 错误 这些错误在PHP 7中肯定会引起某种麻烦(致命错误、语法错误、警告等)。这些用红色突出显示。
  2. 警告 可能或可能不会导致逻辑错误。例如,在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 afei/php7cc

还建议将全局Composer二进制目录添加到您的PATH环境变量中。此目录的位置取决于您使用的操作系统(如果您想了解更多,请参阅Composer文档)。以下命令适用于某些*nix系统

export PATH="$PATH:$HOME/.config/composer/vendor/bin"

这使得您只需输入可执行文件名即可运行php7cc。

Composer(本地,按项目)

请确保您已安装composer。然后从您的项目目录执行以下命令

composer require afei/php7cc --dev

Docker镜像

Docker Hub上可找到Docker镜像(由ypereirareis贡献并维护)。

用法

本节中的示例假设您已使用composer全局安装了php7cc,并且您已将其供应商二进制目录添加到您的PATH。如果不是这种情况,只需用phar包的二进制文件的正确路径替换php7cc。对于本地按项目安装,可执行文件将位于<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/

在这种情况下,只会显示错误,而不会显示警告。

指定输出格式

有两种输出格式可供选择:plainjson

使用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页面上找到。