是否有用于PHP源文件的静态分析工具?二进制本身可以检查语法错误,但是我正在寻找功能更多的东西,例如:
- 未使用的变量分配
- 未先初始化就分配给的数组
- 以及可能的代码样式警告
- ...
是否有用于PHP源文件的静态分析工具?二进制本身可以检查语法错误,但是我正在寻找功能更多的东西,例如:
Answers:
从命令行以lint-mode运行php来验证语法而不执行:
php -l FILENAME
更高级别的静态分析器包括:
低层分析器包括:
运行时分析器由于PHP的动态特性而在某些方面更有用,包括:
文档库phpdoc和doxygen执行一种代码分析。例如,可以将Doxygen配置为使用graphviz呈现漂亮的继承图。
另一个选择是xhprof,它类似于xdebug,但更轻巧,使其适合生产服务器。该工具包括基于PHP的界面。
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
find /your/path -name '*.php' -exec php -l {} \;
工作可靠。
php -l
)起作用,您必须设置display_errors = on
in php.ini
,否则您将仅收到有关存在语法错误的通用消息,而没有有关哪些错误或哪些行的详细信息。
-d
开关在命令行上覆盖设置。例如php -l -d display_errors=on $FILENAME
为了完整起见,请同时检查phpCallGraph。
PHP Mess Detector非常棒且快速。
我尝试使用$ 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依赖项),但它应该是一个完整的软件包。
结果报告像
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.
请参阅Semantic Designs的CloneDR,这是一个“克隆检测”工具,用于查找复制/粘贴/编辑的代码。尽管有空格,注释,甚至变量重命名,它仍会找到准确的和几乎未命中的代码片段。您可以在wesite上找到PHP的示例检测报告。(我是作者)。
有RIPS-静态源代码分析器,用于PHP脚本中的漏洞。RIPS的来源可从SourceForge获得。
从RIPS站点:
RIPS是用PHP编写的工具,可使用静态代码分析来查找PHP应用程序中的漏洞。通过标记和解析所有源代码文件,RIPS能够将PHP源代码转换为程序模型,并检测程序流期间用户输入(受恶意用户影响)可能污染的敏感接收器(潜在易受攻击的函数)。除了发现漏洞的结构化输出外,RIPS还提供了集成的代码审核框架,用于进一步的手动分析。