审核一个大的PHP脚本?

时间:2013-09-13 00:47:45

标签: php debugging audit

我们购买了一个很棒的PHP脚本,并改变了很多代码和功能。现在我们要清除一些代码,从删除未使用的函数/方法开始。

我们正在考虑使用debug_backtrace()向每个方法添加几行代码,以登录文件或数据库,类名/方法的名称+从中调用。

由于应用程序非常大,我想知道在进入并开始编辑数百个函数之前是否有更好的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

xdebug's代码覆盖率工具允许您测试实际执行的代码行,而无需在所有函数/方法中放置跟踪语句。

没有php.ini设置可以控制代码覆盖率统计信息的创建。 PHP函数在运行时打开和关闭统计信息的收集,允许对哪些代码段创建覆盖统计信息进行细粒度控制。

要开始收集代码覆盖率统计信息,请使用xdebug_start_code_coverage()

要停止收集统计信息,请使用xdebug_stop_code_coverage()

xdebug在脚本执行时将收集的统计信息保存在内存中,所以你 可以根据需要随时打开和关闭脚本中的代码覆盖率。检索 将统计信息收集为数组,使用xdebug_get_code_coverage()

你在如何实现它方面有很多自由,但听起来你有一个大的脚本,在这种情况下只需从顶部开始,停止所有出口点,然后在实际出现之前打印出覆盖范围退出。

Zend Developer Zone对此类内容有一个很好的介绍,它以Part One: Introducing xdebug开头。

如果您更喜欢进行静态分析,OWASP男孩会在Source Code Analysis Tools页面上保留一份好的工具列表以及每个工具的优缺点,这些工具详细介绍了开源或免费以及商业工具。

我建议查看一些,例如PHP Mess Detector(PHPMD)它与PDepend非常相似,并提供有关错误,未使用代码和过于复杂功能的报告。它对于识别可能使用某些重构的点非常有用。

可以从命令行调用PHPMD,如下所示:

phpmd {directory} {report format} {rules}

$ phpmd . text codesize,unusedcode 

/src/xxxxxx/api/src/base/Model.php:75    The method __toArray() has a Cyclomatic Complexity of 12. The configured cyclomatic complexity threshold is 10.
/src/xxxxxx/api/src/controller/Users.php:235    Avoid unused parameters such as '$request'.
/src/xxxxxx/api/src/controller/Users.php:246    Avoid unused local variables such as '$x'.
/src/xxxxxx/api/src/controller/Users.php:246    Avoid unused local variables such as '$undeclared'.
/src/xxxxxx/api/src/base/Controller.php    -    Unexpected token: [, line: 88, col: 56, file: /src/xxxxxx/api/src/base/Controller.php.

PHP CodeSniffer可能是目前最好的工具;设置非常简单,默认标准很容易扩展或替换为您自己的标准。因此,对于由超过几个人组成的团队来说,这是一个明智的选择。它还附带PSR-1和PSR-2标准,因此维护一个开源的,PSR兼容的项目只需要针对您的项目安装和运行它(当然,遵循它的建议)。它还具有标记JavaScript和CSS的能力。

可以通过命令行轻松调用PHPCS:

phpcs --standard={comma-separated rulesets} {directory}

使用PHPCS的输出,在任何项目中维护样式指南都是微不足道的。来自同一项目的示例输出:

$ phpcs --standard=PSR1,PSR2 .
FILE: /src/xxxx/api/src/exception/Xxx.php
--------------------------------------------------------------------------------
FOUND 1 ERROR(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
15 | ERROR | The closing brace for the class must go on the next line after | | the body
--------------------------------------------------------------------------------

Time: 0 seconds, Memory: 5.25Mb

Google可以为您提供更多选项,而不是我们在此讨论的空间。希望这能让你找到正确的项目路径。