如何在PHP中执行静态代码分析?
是否有PHP源文件的静态分析工具 二进制文件本身可以检查语法错误,但我正在寻找更有效的方法,例如:如何在PHP中执行静态代码分析?,php,code-analysis,static-analysis,Php,Code Analysis,Static Analysis,是否有PHP源文件的静态分析工具 二进制文件本身可以检查语法错误,但我正在寻找更有效的方法,例如: 未使用的变量赋值 未首先初始化而分配到的数组 可能还有代码样式的警告 。不过,链接1和链接2似乎已经很好地做到了这一点 但是,我不能说我已经大量使用了其中的任何一个:)从命令行以lint模式运行php,以验证语法而不执行: php-l文件名 高级静态分析仪包括: -需要 低液位分析仪包括: (原始函数) 由于PHP的动态特性,运行时分析器在某些方面更有用,包括: 有
- 未使用的变量赋值
- 未首先初始化而分配到的数组
- 可能还有代码样式的警告
但是,我不能说我已经大量使用了其中的任何一个:)从命令行以lint模式运行
php
,以验证语法而不执行:
php-l文件名
高级静态分析仪包括:
- -需要
- (原始函数)
- 有和
- My使用静态/动态相结合的方法,以Xdebug的函数跟踪为基础
- 代码可视化-组件和关联的交互式图形表示
- 代码导航-唯一导航视图显示所有关联,并在您编写或读取代码时与您协同工作
- 快速搜索-键入时搜索方法、字段、文件等
- 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增加了圈复杂度,通常可以用不同的方式编写,以避免和避免错误