Javascript 在文件中查找所有PHP函数

Javascript 在文件中查找所有PHP函数,javascript,php,Javascript,Php,我想在一个文件中查找所有函数-这没有问题: preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData); 问题是,如果有Javascript函数,它们也会进入方案 甚至可以只获取PHP函数。 一个指标是-Tag,但我不知道如何只跟踪那些不被脚本-Tag包围的函数 谢谢大家! 我在写问题2秒钟后就有了这个想法 $data = file_get_contents($file); $data = preg_rep

我想在一个文件中查找所有函数-这没有问题:

preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);
问题是,如果有Javascript函数,它们也会进入方案

甚至可以只获取PHP函数。 一个指标是
-Tag,但我不知道如何只跟踪那些不被
脚本
-Tag包围的函数


谢谢大家!

我在写问题2秒钟后就有了这个想法

$data = file_get_contents($file);   

$data = preg_replace("/<script[^>]*>[\s\S]*?<\/script>/", "", $data);
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);
$data=file\u get\u contents($file);
$data=preg_replace(“/]*>[\s\s]*?/”,“”,$data);
preg\u match\u all(“/function[\s\n]+(\s+[\s\n]*\(/”,$data,$outputData);
只需删除所有的
-标签! 如果您以后需要它们,您还可以保存它们(而不是替换它们)并在以后添加它们


如果其他人也会有同样的问题!

我在写问题2秒钟后就有了这个想法

$data = file_get_contents($file);   

$data = preg_replace("/<script[^>]*>[\s\S]*?<\/script>/", "", $data);
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);
$data=file\u get\u contents($file);
$data=preg_replace(“/]*>[\s\s]*?/”,“”,$data);
preg\u match\u all(“/function[\s\n]+(\s+[\s\n]*\(/”,$data,$outputData);
只需删除所有的
-标签! 如果您以后需要它们,您还可以保存它们(而不是替换它们)并在以后添加它们


如果其他人也会有同样的问题!

一个选项是在处理之前删除所有的
..
标记,但这假设您将只在文件中直接包含这些标记中的JavaScript。如果您有一个函数或库为您生成HTML,您可以输出JavaScript代码而无需解释在你的PHP文档中有
标记。问题是你正在使用模式匹配,这可能会导致一系列误报

要同时消除这些误报,可以使用来确定哪些函数是在PHP中定义的,哪些不是。一旦有了可能的函数名数组,请使用以下命令:

$data = file_get_contents($file);   
$outputData;
$validMatches=array();
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);

foreach($outputData[1] as $match) {
    $isValid=true;
    try {
        $reflection = new \ReflectionFunction($match);
    } catch (\ReflectionException $e) {
        $isValid=false;
    }
    if($isValid == true) {
        $validMatches[]=$match;
    }
}

这更为详细,但它将保证您将获得一个仅包含PHP函数名的列表。

一个选项是在处理之前删除所有
..
标记,但这假设您将仅在这些标记中直接在文件中包含JavaScript。如果您有一个函数或库为您生成HTML,则可能或者您可以在PHP文档中不显式地使用
标记来输出JavaScript代码。问题是您使用的是模式匹配,这可能会导致一系列误报

要同时消除这些误报,可以使用来确定哪些函数是在PHP中定义的,哪些不是。一旦有了可能的函数名数组,请使用以下命令:

$data = file_get_contents($file);   
$outputData;
$validMatches=array();
preg_match_all("/function[\s\n]+(\S+)[\s\n]*\(/", $data, $outputData);

foreach($outputData[1] as $match) {
    $isValid=true;
    try {
        $reflection = new \ReflectionFunction($match);
    } catch (\ReflectionException $e) {
        $isValid=false;
    }
    if($isValid == true) {
        $validMatches[]=$match;
    }
}

这更为详细,但它将保证您只会得到一个PHP函数名列表。

这将打开一个巨大的蜡球。有很多方法可以“隐藏”脚本标记。例如,有js生成js,您最终会得到像
document.write(“”)这样的愚蠢事情
。祝你好运…@MarcB你是对的!它会变得一团糟-但幸运的是我找到了另一个解决方案。它似乎有效:-)无论如何,谢谢!这会打开一个巨大的蜡球。有很多种方法可以“隐藏”脚本标记。例如,有一种js可以生成js,你最终会得到像
document.write(“”)这样的愚蠢事情
。祝你好运…@MarcB你是对的!它只会变得一团糟-但幸运的是我找到了另一个解决方案。它似乎有效:-)无论如何,谢谢!