0

我们有一个在主机上定义但不是在本地定义的函数,这会导致名称冲突。功能是go(),它在柯比和其他地方。当我们部署到Vercel时,我们会收到一条错误消息,指出go()已定义。这在本地或其他主机上都不是问题(我们以 Dreamhost 为例)。

我们尝试这样做以找到调用原始文件的位置:

$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();

但我们从字面上得到::

好像没有定义一样。如果我们将函数包装在if (!function_exists('go'))其中确实会因其他原因而中断,但重新声明错误得到缓解,因此我们知道该函数存在但我们找不到它。

在 JavaScript 中你可以这样做console.log(someFunction),它会以字符串形式输出函数。例子:

在此处输入图像描述

我们可以在 PHP 中做到这一点吗?这将允许我们尝试至少在项目或网络上搜索代码签名,以查找发生冲突的代码。

4

1 回答 1

0

我认为 go 函数在扩展中,所以找不到使用 ReflectionFunction 的方法。ReflectionFunction 类有很多 get 函数来获取函数的信息,你可以调用所有的函数来查看更多的信息,也许幸运的是对你微笑。

我在 mysql 扩展中尝试了一个函数mysqli_query,它也没有找到文件名或文件行,但是当我调用它时它给了我函数列表$ref->getExtension();

于 2020-11-17T02:17:12.770 回答