如何在PHP中写入控制台?

Lab*_*lan 288 php printing debugging console

是否可以写入字符串或登录到控制台?

我的意思是说

就像在jsp中一样,如果我们打印出类似于system.out.println("some")它的东西,那么它将出现在控制台而不是页面上.

Sen*_*dor 364

或者你使用从这个网站PHP Debug到控制台的技巧

首先,您需要一个小的PHP帮助函数

function debug_to_console($data) {
    $output = $data;
    if (is_array($output))
        $output = implode(',', $output);

    echo "<script>console.log('Debug Objects: " . $output . "' );</script>";
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它

debug_to_console("Test");
Run Code Online (Sandbox Code Playgroud)

这将创建一个这样的输出:

Debug Objects: Test
Run Code Online (Sandbox Code Playgroud)

  • @Mawg(和赞成该评论的人):如果输出中出现`$ data`,那么你没有完全按照所示键入该函数.仔细查看单引号和双引号,以确保它们与上面的代码匹配.`$ data`是一个php变量; 当页面被发送到浏览器时,该php变量将被传递给`debug_to_console`的参数替换.浏览器永远不应该看到`$ data`.(如果你在浏览器中查看`page source`,它不应该说'$ data`.) (9认同)
  • 在FireFox v27中,它输出"Debug Objects:".$ data.""` (5认同)
  • 因此,换句话说,答案是这样的:echo“ &lt;script&gt; console.log('Debug Objects:”。$ output。“')); &lt;/ script&gt;”; (3认同)
  • OP 声明他想打印到标准输出,而不是 html/js 控制台。 (2认同)

Mal*_*chi 137

火狐

在Firefox上,您可以使用名为FirePHP的扩展,它可以将PHP应用程序中的信息记录和转储到控制台.这是令人敬畏的Web开发扩展Firebug的插件.

但是,如果您使用Chrome,则会有一个名为Chrome Loggerwebug的PHP调试工具(webug在日志顺序方面存在问题).

最近,Clockwork正在积极开发中,它通过添加一个新的面板来扩展Developer Tools,以提供有用的调试和分析信息.它为Laravel 4Slim 2提供开箱即用的支持,并且可以通过其可扩展的API添加支持.

使用Xdebug

调试PHP的更好方法是通过Xdebug.大多数浏览器都提供帮助程序扩展,以帮助您传递所需的cookie /查询字符串以初始化调试过程.

  • echo"<script> console.log('PHP:',",get_option("slides_data"),"); </ script>"; (7认同)
  • 还有一个用于调试PHP的Safari扩展名为Xdebug Helper.我从这个页面安装了它:https://extensions.apple.com/#tab (5认同)
  • FirePHP正式死亡. (5认同)
  • Fire PHP链接已经死了 (3认同)
  • OP表示他想打印到标准输出,而不是html / js控制台。 (3认同)

Tra*_*vis 63

如果您正在寻找一种简单的方法,请回显为JSON:

<script>
    console.log(<?= json_encode($foo); ?>);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这增加了更多的上下文:`function debug_log($ object = null,$ label = null){$ message = json_encode($ object,JSON_PRETTY_PRINT); $ label ="调试".($ label?"($ label):":':'); echo"<script> console.log(\"$ label \",$ message); </ script>"; }` (3认同)

nik*_*org 37

默认情况下,所有输出都转到stdout,即HTTP响应或控制台,具体取决于您的脚本是由Apache运行还是在命令行上手动运行.但您可以使用error_log日志记录和各种I/O流可以写入fwrite.

  • 谢谢,`error_log`是我需要从[PHP内置Web服务器]输出到终端的(http://www.php.net/manual/en/features.commandline.webserver.php) (5认同)

小智 35

试试这个工作:

echo("<script>console.log('PHP: " . $data . "');</script>");
Run Code Online (Sandbox Code Playgroud)

  • 这不是非常实时,因为php在完成处理后会发送所有页面.此外,如果php文件中存在错误,您甚至不会看到任何日志,因为它只会返回错误页面,从而忽略您之前的打印. (5认同)

Neo*_*Neo 19

echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";
Run Code Online (Sandbox Code Playgroud)

创建一个

<div>
Run Code Online (Sandbox Code Playgroud)

随着

display="none"
Run Code Online (Sandbox Code Playgroud)

所以不显示div,而是显示

console.log()
Run Code Online (Sandbox Code Playgroud)

函数是在javascript中创建的.所以你在控制台中收到消息.

  • 从技术上讲,这是对最初问题的正确答案 - 如何从PHP写入浏览器控制台.但我认为作者正在尝试调试PHP,因此有更好的选择.它不应该被低估,严格来说这是一个正确的答案. (3认同)
  • 我不明白为什么你甚至需要`div`。如果您只有一个&lt;script&gt;块,则浏览器中将不会显示任何内容。 (2认同)

bue*_*tge 18

作为上面流行答案的链接网页的作者,我想添加这个简单帮助函数的最后一个版本,更加可靠.

我用来json_encode()检查不必要的var类型,并添加一个缓冲区来解决框架问题,没有可靠的返回或过度使用header().

/**
 * Simple helper to debug to the console
 *
 * @param $data object, array, string $data
 * @param $context string  Optional a description.
 *
 * @return string
 */
function debug_to_console($data, $context = 'Debug in Console') {

    // Buffering to solve problems frameworks, like header() in this and not a solid return.
    ob_start();

    $output  = 'console.info(\'' . $context . ':\');';
    $output .= 'console.log(' . json_encode($data) . ');';
    $output  = sprintf('<script>%s</script>', $output);

    echo $output;
}
Run Code Online (Sandbox Code Playgroud)

用法

// $data is the example variable, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console($data);`
Run Code Online (Sandbox Code Playgroud)

结果截图

另外一个简单的例子就像图像一样容易理解.

在此输入图像描述

  • 是的,它是纯静态 php,而不是 Ajax。 (2认同)

Pan*_*sht 16

我认为它可以用 -

function jsLogs($data) {
    $html = "";
    $coll;

    if (is_array($data) || is_object($data)) {
        $coll = json_encode($data);
    } else {
        $coll = $data;
    }

    $html = "<script>console.log('PHP: ${coll}');</script>";

    echo($html);
    # exit();
}

# For String
jsLogs("testing string"); #PHP: testing string

# For Array
jsLogs(array("test1", "test2")); # PHP: ["test1","test2"]

# For Object
jsLogs(array("test1"=>array("subtest1", "subtest2"))); #PHP: {"test1":["subtest1","subtest2"]}
Run Code Online (Sandbox Code Playgroud)

  • 非常复杂的一个.谢谢@Pankaj Bisht (3认同)
  • 应该有一个解释。 (2认同)

Klo*_*ner 14

一些很好的答案可以增加更深度; 但我需要更简单的东西,更像JS console.log()命令.

我在AJAX应用程序中使用PHP进行了很多"收集数据并转换成xml".JS console.log在那种情况下不起作用; 它打破了xml输出.(也许有人有解决方案?)

Xdebug等有类似的问题.

我在Windows中的解决方案:

  • 设置一个.txt易于访问和写入的文件
  • error_log.ini文件中设置PHP 变量以写入该文件
  • 在Windows文件资源管理器中打开该文件,然后打开它的预览窗格
  • 使用error_log('myTest');PHP命令发送消息

这个解决方案很简单,大多数时候都满足我的需求,标准的PHP,每次PHP写入时预览窗格都会自动更新.


小智 13

我认为最好的解决方案是使用 \n error_log(content)\n这是输出

\n

2022 年编辑:

\n

所以我\xe2\x80\x99发现了更好的方法,那就是file_put_contents("php://stdout", content)

\n

它在没有日志信息的情况下写入

\n


zee*_*zee 11

我发现这有用:

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        $output = '<script>console.log("' . str_repeat(" ", $priority-1) . (is_array($data) ? implode(",", $data) : $data) . '");</script>';

        echo $output;
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用它像:

<?php
    $debug = 5; // All lower and equal priority logs will be displayed
    console('Important', 1 , $debug);
    console('Less Important', 2 , $debug);
    console('Even Less Important', 5 , $debug);
    console('Again Important', 1 , $debug);
?>
Run Code Online (Sandbox Code Playgroud)

控制台中的哪些输出:

Important
 Less Important
     Even Less Important
Again Important
Run Code Online (Sandbox Code Playgroud)

您可以通过使用$ debug值限制它们来关闭不太重要的日志

  • @HattrickNZ 这是为了让您拥有不同级别的日志消息。如果您正在调试,您可能希望显示包含大量信息的非常健谈的消息流,但是在正常操作期间,您可能会将 debug 设置为 1,以便您只显示最重要的错误/日志项目。由您决定在编写代码时哪些项目是重要的。 (2认同)

小智 11

$variable = "Variable";
echo "<script>console.log('$variable');</script>";
Run Code Online (Sandbox Code Playgroud)

PHP和Javascript交互.


ash*_*med 7

function phpconsole($label='var', $x) {
    ?>
    <script type="text/javascript">
        console.log('<?php echo ($label)?>');
        console.log('<?php echo json_encode($x)?>');
    </script>
    <?php
}
Run Code Online (Sandbox Code Playgroud)


小智 7

对于数组,字符串或对象而言,简单易行.

function console_log( $data ) {
  $output  = "<script>console.log( 'PHP debugger: ";
  $output .= json_encode(print_r($data, true));
  $output .= "' );</script>";
  echo $output;
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ger 6

如果要写入PHP日志文件而不是JavaScript控制台,可以使用以下命令:

error_log("This is logged only to the PHP log")

参考:http://php.net/manual/en/function.error-log.php


bar*_*hin 5

还有一个很棒的谷歌Chrome扩展PHP控制台PHP库 ,允许:

  • 查看Chrome JavaScript控制台和通知弹出窗口中的错误和例外情况.
  • 转储任何类型变量.
  • 远程执行PHP代码.
  • 通过密码保护访问.
  • 按请求分组控制台日志.
  • 跳转到文本编辑器中的错误文件:行.
  • 将错误/调试数据复制到剪贴板(对于测试人员).


Seb*_*ner 5

对于Chrome,有一个名为Chrome Logger的扩展程序,可以记录PHP消息.

Firefox DevTools甚至集成了对Chrome Logger协议的支持.

要启用日志记录,您只需要在项目中保存"ChromePhp.php"文件即可.然后它可以像这样使用:

include 'ChromePhp.php';
ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');
Run Code Online (Sandbox Code Playgroud)

GitHub页面获取的示例.

输出可能如下所示:

Firefox DevTools中的服务器日志


Imr*_*oor 5

这是我的解决方案,这个方案的好处是你可以传递任意数量的参数。

function console_log()
{
    $js_code = 'console.log(' . json_encode(func_get_args(), JSON_HEX_TAG) .
        ');';
    $js_code = '<script>' . $js_code . '</script>';
    echo $js_code;
}
Run Code Online (Sandbox Code Playgroud)

这样称呼它

console_log('DEBUG>>', 'Param 1', 'Param 2');
console_log('Console DEBUG:', $someRealVar1, $someVar, $someArray, $someObj);
Run Code Online (Sandbox Code Playgroud)

现在您应该能够在控制台中看到输出,祝​​您编码愉快:)