如何在PHP中执行静态代码分析?

是否有PHP源文件的静态分析工具?

二进制本身可以检查语法错误,但我正在寻找做得更多的东西,比如:

  • 未使用的变量赋值
  • 未初始化就被赋值的数组
  • 可能还有代码风格的警告
  • ...
154374 次浏览

Online PHP lint

PHPLint

单元变量检查。不过,Link 1和2似乎已经很好地做到了这一点。

不过,我不能说我密集地使用了其中的任何一个:)

以lint模式从命令行运行php,在不执行的情况下验证语法:

php -l FILENAME

高级静态分析器包括:

较低级别的分析器包括:

由于PHP的动态特性,运行时分析程序对某些事情更有用,包括:

文档库phpdocDoxygen执行一种代码分析。例如,Doxygen可以配置为使用Graphviz呈现良好的继承图。

另一个选项是xhprof,它类似于Xdebug,但更轻,适合于生产服务器。该工具包括一个基于php的界面。

为了完整性——也检查phpCallGraph

PHP PMD(编程错误检测器)和PHP CPD(复制/粘贴检测器)作为PHPUnit)的前一部分。

参见语义设计公司的克隆, a "clone detection"查找复制/粘贴/编辑代码的工具。

它将找到精确的和接近错误的代码片段,尽管有空白,注释,甚至变量重命名。PHP的检测报告样本可以在网站上找到。(我是作者。)

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

  • 代码可视化——组件和关联的交互式图形表示。
  • 代码导航-独特的导航视图显示所有的关联,并与您一起编写或阅读代码。
  • 快速搜索-搜索方法,字段,文件等。

NetBeans IDE检查语法错误、不常用的变量等。它不是自动的,但对于小型或中型项目来说效果很好。

PHP混乱检测器是非常棒和快速的。

我已经尝试使用php -l和其他一些工具。

然而,在我的经验中最好的一个(当然,你的里程可能不同)是PFFF工具集的检验。我在Quora上听说过pfff (是否有一个好的PHP lint /静态分析工具?< / >)。

您可以编译并安装它。没有很好的软件包(在我的Linux Mint Debian系统上,我必须先安装libpcre3-devocamllibcairo-devlibgtk-3-devlibgimp2.0-dev依赖项),但它应该值得安装。

结果报告如下

$ ~/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.

有一个静态代码分析工具叫做PHP分析仪。PHP Analyzer现在是一个已弃用的项目,但您仍然可以在遗留分支上访问它。

在许多类型的静态分析中,它还提供了基本的自动修复功能,参见的文档

你可能想尝试使用Facebook的嘻哈编译。

它对整个项目进行静态分析,可能就是你要找的。

GitHub page

一个用于PHP脚本漏洞的静态源代码分析器。RIPS的源代码可以在SourceForge找到。

来自RIPS网站:

RIPS是一个用PHP编写的工具,用于查找PHP中的漏洞 应用程序使用静态代码分析。通过标记和解析所有 源代码文件的RIPS是能够将PHP源代码转换成 程序模型和检测敏感接收器(潜在的脆弱 函数),可以被用户输入(受恶意的 用户)在程序流中。除了found的结构化输出 RIPS还提供了一个集成的代码审计框架