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

如何在PHP中执行静态代码分析?,php,code-analysis,static-analysis,Php,Code Analysis,Static Analysis,是否有PHP源文件的静态分析工具 二进制文件本身可以检查语法错误,但我正在寻找更有效的方法,例如: 未使用的变量赋值 未首先初始化而分配到的数组 可能还有代码样式的警告 。不过,链接1和链接2似乎已经很好地做到了这一点 但是,我不能说我已经大量使用了其中的任何一个:)从命令行以lint模式运行php,以验证语法而不执行: php-l文件名 高级静态分析仪包括: -需要 低液位分析仪包括: (原始函数) 由于PHP的动态特性,运行时分析器在某些方面更有用,包括: 有

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

二进制文件本身可以检查语法错误,但我正在寻找更有效的方法,例如:

  • 未使用的变量赋值
  • 未首先初始化而分配到的数组
  • 可能还有代码样式的警告

。不过,链接1和链接2似乎已经很好地做到了这一点


但是,我不能说我已经大量使用了其中的任何一个:)

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

php-l文件名

高级静态分析仪包括:

  • -需要
低液位分析仪包括:

  • (原始函数)
由于PHP的动态特性,运行时分析器在某些方面更有用,包括:

  • 有和
  • My使用静态/动态相结合的方法,以Xdebug的函数跟踪为基础
文档库并执行一种代码分析。例如,可以将Doxygen配置为使用呈现漂亮的继承图

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

有关完整性,请同时检查。

(编程错误检测器)和(复制/粘贴检测器)作为。

的前一部分。请参阅查找复制/粘贴/编辑代码的“克隆检测”工具

它将找到准确的、几乎没有遗漏的代码片段,尽管有空格、注释甚至变量重命名。PHP的样本检测报告可以在网站上找到。(我是作者。)

有一个新工具叫做。这是一个用于和7.x的代码探索插件。它支持PHP的实时代码分析,并提供以下工具:

  • 代码可视化-组件和关联的交互式图形表示
  • 代码导航-唯一导航视图显示所有关联,并在您编写或读取代码时与您协同工作
  • 快速搜索-键入时搜索方法、字段、文件等

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

      非常棒,速度也很快。

      我尝试过使用
      php-l
      和一些其他工具

      然而,根据我的经验(当然,你的里程数可能会有所不同),最好的是。我在Quora()上听说了pfff

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

      结果报告如下

      $~/sw/pfff/scheck~/code/github/sc/
      login now.php:7:4:CHECK:Unused局部变量$title
      go automatic.php:14:77:CHECK:使用未声明的变量$goul。
      
      有一个静态代码分析工具,名为。PHP Analyzer现在是一个不推荐使用的项目,但您仍然可以在遗留分支上访问它


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

      您可能需要尝试使用Facebook的进行编译

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

      有。RIPS的源代码可访问

      从RIPS站点:

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


      这不是问题的答案。就像回答存在的netbeans等。看看这个网站,这似乎是一个难以置信的工具。稍后我会仔细看看!感谢你的链接(+1表示“我是作者”)这是任何纵容大学生的祸根(+1表示我花了6个小时尝试了所有这些好东西@dimitko:那是因为
      php-l
      一次只能读取一个输入文件(也就是说,如果执行
      php-l file1.php file2.php
      ,它将不起作用)。相反,您需要使用
      -n1
      选项,它告诉
      xargs
      每个命令进程只使用一个输入行。这将导致它分别运行
      php-lfile1.php
      ,然后运行
      php-lfile2.php
      。同时,您可以使用
      -P
      一次运行“n”个进程,以便并行执行:
      find-name'*.inc'-o-name'*.php'-print0 | xargs-0-n1-P10 php-l
      find/your/path-name'*.php'-exec php-l{}
      工作可靠。注意:要使内置lint函数(
      php-l
      )工作,您必须在
      php.ini
      中设置
      display\u errors=on
      ,否则您只会得到一条关于语法错误的一般消息,而不会得到关于错误或行的详细信息。Synetech-好消息。不过,您可以使用
      -d
      开关覆盖命令行上的设置。例如,
      php-l-d display\u errors=on$FILENAME
      谢谢!我在找一个很棒的。事实上,我拒绝使用任何东西,除了可怕的工具这是一个开始,似乎是Netbeans所使用的,但我不会完全相信它。它的一些选项非常奇怪(“如果你使用else语句,警告你”),而且它的检测中有许多大错误,甚至没有得到开发人员的响应:else增加了圈复杂度,通常可以用不同的方式编写,以避免和避免错误