现在,我有一个脚本,它使用PHP的tokenizer来查找PHP源代码文件中的某些函数。我目前正在寻找的模式是:
T_STRING + T_WHITESPACE(可选)+“(”
这似乎与我的所有测试用例相匹配,除了变量函数,我忽略了这个问题。
这里显而易见的问题是这种模式会产生很多误报,比如匹配函数定义:
public function foo() { // foo() should not be matched
我的问题是,是否有更可靠/准确的方法来查看源代码并提取所有函数调用?也许比使用tokenizer更好的方法?
修改
特别是,我希望在类文件中模拟disable_functions
PHP指令的功能。因此,如果不允许exec()
,我试图在分析的文件中找到该函数的任何用法。我确实意识到变量函数使得这非常困难,所以我正在检测它们并禁止它们。
答案 0 :(得分:0)
首先运行tokenizer(在PHP中可用)。然后在令牌之上运行解析器。解析器需要读取令牌,并且应该能够告诉您特定令牌的用途。这取决于解析器的可靠性结果的可靠性。
如果您当前的解析器(您没有显示任何代码)不够可靠,则需要编写更好的解析器。这很简单。可能你做的不仅仅是标记,然后阅读,因为它通过了可能还不够。
答案 1 :(得分:0)
而不是使用tokenizer,而是考虑使用更高级别的解析器来分析代码。例如,PHP-Parser可以显式标识函数声明,以及变量函数调用。