查找 PHP 脚本输出字符串的位置
Find where PHP script outputs a string
当我 运行 php someScript.php
时,我得到了一些预期的输出和一些意外的字符串。它们看起来像调试字符串,可能是在开发期间放置在那里的。该文件是更大框架的一部分,可以包含可能进一步需要其他文件的其他文件。
我不知道哪个函数(echo、print、var_dump、write、...)被用来输出(不需要的)字符串。
如何找到将(动态生成的)字符串输出到标准输出的位置的文件和行号。
谢谢!
您应该能够从输出的结构中判断它是 var_dump、dd,还是更基本的回显。如果您在代码库中搜索 echo,实际上有那么多吗?
您可以尝试使用 xdebug 开始逐行单步执行代码,并找出代码的打印位置。如果正在打印的字符串确实没有静态文本,您可以 grep 代码库,这就是我开始的地方。
它有点难看,但您可以尝试弄乱输出缓冲区。以下方法似乎对我有用:
<?php
$locations = [];
ob_start(function($buffer) {
global $locations;
$locations[] = debug_backtrace();
return $buffer;
}, 1);
// Your code with output here.
// $locations should contain the information now
print_r($locations);
?>
当我 运行 php someScript.php
时,我得到了一些预期的输出和一些意外的字符串。它们看起来像调试字符串,可能是在开发期间放置在那里的。该文件是更大框架的一部分,可以包含可能进一步需要其他文件的其他文件。
我不知道哪个函数(echo、print、var_dump、write、...)被用来输出(不需要的)字符串。
如何找到将(动态生成的)字符串输出到标准输出的位置的文件和行号。
谢谢!
您应该能够从输出的结构中判断它是 var_dump、dd,还是更基本的回显。如果您在代码库中搜索 echo,实际上有那么多吗?
您可以尝试使用 xdebug 开始逐行单步执行代码,并找出代码的打印位置。如果正在打印的字符串确实没有静态文本,您可以 grep 代码库,这就是我开始的地方。
它有点难看,但您可以尝试弄乱输出缓冲区。以下方法似乎对我有用:
<?php
$locations = [];
ob_start(function($buffer) {
global $locations;
$locations[] = debug_backtrace();
return $buffer;
}, 1);
// Your code with output here.
// $locations should contain the information now
print_r($locations);
?>