480

有没有针对 PHP 源文件的静态分析工具?

二进制文件本身可以检查语法错误,但我正在寻找更多功能,例如:

  • 未使用的变量赋值
  • 未先初始化就分配到的数组
  • 以及可能的代码风格警告
  • ...
4

12 回答 12

374

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

php -l FILENAME

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

低级分析器包括:

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

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

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

于 2008-12-18T22:02:58.970 回答
38

在线 PHP 皮棉

PHPLint

统一变量检查。不过,链接 1 和 2 似乎已经很好地做到了。

不过,我不能说我已经大量使用了这些中的任何一个:)

于 2008-12-18T19:48:21.643 回答
27

为了完整性——还要检查phpCallGraph

于 2008-12-19T11:29:23.007 回答
25

PHP Mess Detector很棒而且速度很快。

于 2012-02-17T17:00:49.210 回答
17

我试过使用php -l和其他几个工具。

但是,根据我的经验,最好的一个(当然,您的里程可能会有所不同)是pfff toolset 的检查。我在 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.
于 2012-05-26T22:40:39.807 回答
14

请参阅Semantic Designs 的 CloneDR,这是一种“克隆检测”工具,可查找复制/粘贴/编辑的代码。

尽管有空格、注释甚至变量重命名,它仍会找到准确的和未命中的代码片段。可以在网站上找到 PHP 的示例检测报告。(我是作者。)

于 2010-03-07T07:05:47.440 回答
7

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

于 2010-09-02T08:32:43.027 回答
6

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

  • 代码可视化 - 组件和关联的交互式图形表示。
  • 代码导航 - 独特的导航视图显示所有关联,并在您编写或阅读代码时与您一起工作。
  • 快速搜索 - 在您键入方法、字段、文件等时搜索。
于 2010-06-02T06:50:37.400 回答
5

PHP PMD (Programming Mistake Detector) 和PHP CPD (Copy/Paste Detector) 作为PHPUnit的前身。

于 2010-01-09T22:45:20.943 回答
4

RIPS——一种用于 PHP 脚本漏洞的静态源代码分析器。RIPS 的源代码可在SourceForge获得。

从 RIPS 网站:

RIPS 是一个用 PHP 编写的工具,用于使用静态代码分析来查找 PHP 应用程序中的漏洞。通过对所有源代码文件进行标记和解析,RIPS 能够将 PHP 源代码转换为程序模型,并检测在程序流程中可能被用户输入(受恶意用户影响)污染的敏感接收器(潜在易受攻击的函数)。除了发现漏洞的结构化输出外,RIPS 还提供了一个集成的代码审计框架,用于进一步的手动分析。

于 2013-08-30T23:49:03.320 回答
3

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

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

于 2013-03-13T22:11:44.297 回答
2

您可能想尝试使用 Facebook 的HipHop进行编译。

它对整个项目进行静态分析,可能是您正在寻找的。

GitHub页面

于 2013-05-26T03:08:46.367 回答