哪个脚本正在 PHP 中写入输出?

Which script is writing output in PHP?

我正在开发一个 Laravel 应用程序,经过一些更新后,我在每个 http 响应或控制台输出中不断收到一个逗号“,”,所以我疯狂地试图找到哪个脚本文件正在打印它字符.

是否可以知道哪个文件正在写入输出 http 响应或控制台?


更新

我已经在 Composer 的 ClassLoader vendor\composer\ClassLoader.php 中调用了加载的 类 的包含函数之后的 echo 调用,如下所示:

/**
 * Scope isolated include.
 *
 * Prevents access to $this/self from included files.
 */
function includeFile($file)
{
    include $file; echo $file . "\n";
}

现在加载了以下 类 之间的逗号,这有帮助吗?

C:\Users\Bla\Bla\trunk\vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php 
,C:\Users\Bla\Bla\trunk\vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php 
C:\Users\Bla\Bla\trunk\vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php

更新 2

找到了!正如 @vladsch 所说,它在我的一个配置文件中的开始标记 ,<?php 之前,谢谢

不,你不能,这就是为什么你应该使用版本控制系统(即:git),这样你就可以在系统中断时轻松回滚。

在您的情况下,您可以尝试在工作目录的每个文件中搜索逗号(不包括 vendor 和其他不重要的文件夹,例如 storage)

如果您有调试器,您可以尝试从头开始检查每一个调用

是的,您可以,debugging with xdebug 或其他调试器工具,逐步(step into)直到找到脚本。

请参阅此 stackover entry 以获得指导。

我强烈建议使用真正的调试工具作为良好的专业实践。但也许出于这个特定的目的,它有点过分了。

您可能可以通过一些基本的调试来缩小范围。在整个应用程序中添加 dd('hello')

我将从 routes.php 文件开始。查看逗号出现在 hello 之前还是之后。如果它在 hello 之前,则逗号在引导文件之一中。

如果逗号在 hello 之后,那么它很可能出现在您的某个视图等中。继续将 dd('hello') 移到您的应用程序的更深处,直到它出现。

因为您在 HTTP 和控制台中拥有它,所以这排除了视图。

罪魁祸首可能是在开始 <?php 标记之前无意中插入了一个逗号。很可能是每个 PHP 文件顶部的第一个文件。

搜索 ,<?php 或正则表达式模式 /\s*,\s*<\?php/