PHP文件是否有静态代码分析器[如Lint]?

esw*_*ald 460 php code-analysis static-analysis

是否有PHP文件的静态代码分析器?二进制本身可以检查语法错误,但我正在寻找更多的东西,比如未使用的变量赋值,分配到的数组,而不是先被初始化,以及可能的代码样式警告.开源程序将是首选,但如果强烈建议,我们可能会说服公司支付费用.

tro*_*skn 353

从命令行以lint-mode运行php以验证语法而不执行:

php -l FILENAME

更高级别的静态分析仪包括:

低级分析仪包括:

运行时分析器,由于PHP的动态特性,对某些东西更有用,包括:

文档库phpdocdoxygen执行一种代码分析.例如,Doxygen可以配置为使用graphviz呈现漂亮的继承图.

另一种选择是xhprof,类似于xdebug,但更轻,使其适用于生产服务器.该工具包括基于PHP的界面.

  • 尝试所有这些好东西,花了我6小时的生命值! (18认同)
  • @dimitko:那是因为`php -l`一次只能读取一个输入文件(也就是说,如果你执行`php -l file1.php file2.php`它将不起作用).相反,你需要使用`-n 1`选项,它告诉`xargs`每个命令进程只使用一个输入行.这将导致它分别运行`php -l file1.php`然后运行`php -l file2.php`.同时,您可以使用`-P <n>`一次运行"n"个进程,以便并行执行:`find.-name'*.inc'-o -name'*.php'-print0 | xargs -0 -n1 -P10 php -l` (14认同)
  • `find/your/path -name'*.php'-exec php -l {} \;`工作可靠. (10认同)
  • **NB**:要使内置lint函数(`php -l`)起作用,你必须在`php.ini`中设置`display_errors = on`,否则你只会得到关于语法的通用消息错误,但没有关于什么错误或什么行的详细信息. (10认同)
  • Synetech - 很好.您可以使用`-d`开关覆盖命令行上的设置.例如`php -l -d display_errors = on $ FILENAME` (7认同)
  • PHP_CodeSniffer在开始时对我看起来非常好,但我不能为我的生活使它不显示缩进"错误".它似乎完全忽略了`--error-severity`选项. (6认同)
  • @ira I*通过称之为"运行时分析选项"来做他们的提及,但也许我应该更明确一些? (2认同)

Mar*_*man 38

在线PHP lint

PHPLint

单位变量检查.但是,链接1和2似乎已经很好了.

我不能说我已经集中使用了这些,但:)


Til*_*ill 27

为了完整性 - 还要检查phpCallGraph.


are*_*del 24

PHP Mess Detector非常棒且速度很快.

  • 谢谢!我在寻找一个很棒的.事实上,我拒绝使用任何东西,但很棒的工具.:) (7认同)
  • 这是一个开始,它似乎是 Netbeans 使用的,但我不会完全相信它。它的一些选项很奇怪(如果你使用 else 语句“警告”你??),并且它的检测中有许多大错误,甚至没有得到开发人员的回应:https://github .com/phpmd/phpmd/issues (2认同)

rjh*_*a94 17

我尝试过使用$ php -l和其他工具.然而,根据我的经验(YMMV,当然)中最好的一个是pfff工具集的方案.我在Quora上听说过pfff(http://www.quora.com/Is-there-a-good-PHP-lint-static-analysis-tool)

您可以编译并安装它.没有很好的软件包(在我的薄荷Debian上,我必须首先安装libpcre3-dev,ocaml,libcairo-dev,libgtk-3-dev和libgimp2.0-dev依赖项)但它应该值得一个intsall.

结果报告如

rjha@mint ~ $ ~/sw/pfff/scheck ~/code/github/sc/
login-now.php:7:4: CHECK: Unused Local variable $title
go-automatic.php:14:77: CHECK: Use of undeclared variable $goUrl.
Run Code Online (Sandbox Code Playgroud)

  • Scheck总是给我错误“ PHP检查程序需要一个图形文件”。几乎不存在的文档没有示例。 (2认同)

Ira*_*ter 14

请参阅Semantic Designs的CloneDR,这是一种"克隆检测"工具,可查找复制/粘贴/编辑的代码.尽管有空格,注释甚至可变的重命名,它仍会找到精确和接近错过的代码片段.可以在wesite找到PHP的样本检测报告.(我是作者).

  • 为"我是作者"+1 (5认同)

sli*_*kts 7

NetBeans IDE检查语法错误,未使用的变量等.它不是自动化的,但适用于中小型项目.


zvi*_*ico 6

有一个名为nWire for PHP的新工具.它是Eclipse PDT和Zend Studio 7.x的代码探索插件.它支持PHP的实时代码分析,并提供以下工具:

  • 代码可视化 - 组件和关联的交互式图形表示.
  • 代码导航 - 独特的导航视图显示所有关联,并在您编写或读取代码时与您一起使用.
  • 快速搜索 - 在键入方法,字段,文件等时进行搜索


ere*_*non 5

PHP PMD(项目混乱检测器)和PHP CPD(复制粘贴检测器)作为PHPUnit的前一部分