将“var_dump”发送到FireBug控制台

时间:2013-02-21 05:35:54

标签: php firebug var-dump firephp

如您所知var_dump()除了值显示其数据类型长度

有没有办法将其输出记录到 FireBug控制台

我尝试了 FirePHP FireLogger ,但两者都只输出变量的值(有时甚至是不正确的变量值)。

12 个答案:

答案 0 :(得分:16)

您可以通过在脚本标记中放置console.log()来将JavaScript转储到控制台:

<script type="text/javascript">
console.log("hello");
</script>

所以如果你在那里做一个php转储......

<script type="text/javascript">
console.log("<?php var_dump('abc'); ?>");
</script>

你只需要小心var_dump中的'和'来打破你的JavaScript。在这个例子中它会没问题,因为HTML会是:

<script type="text/javascript">
console.log("string 'abc' (length=3)");
</script>

记住php已处理然后放入JavaScript。 您也可以将其转储到评论中:

<!--
<?php 
var_dump('abc');
?>
-->

然后您可以查看source或inspect元素。

答案 1 :(得分:16)

也许你需要的是这样的东西:

function var2console($var, $name='', $now=false)
{
   if ($var === null)          $type = 'NULL';
   else if (is_bool    ($var)) $type = 'BOOL';
   else if (is_string  ($var)) $type = 'STRING['.strlen($var).']';
   else if (is_int     ($var)) $type = 'INT';
   else if (is_float   ($var)) $type = 'FLOAT';
   else if (is_array   ($var)) $type = 'ARRAY['.count($var).']';
   else if (is_object  ($var)) $type = 'OBJECT';
   else if (is_resource($var)) $type = 'RESOURCE';
   else                        $type = '???';
   if (strlen($name)) {
      str2console("$type $name = ".var_export($var, true).';', $now);
   } else {
      str2console("$type = "      .var_export($var, true).';', $now);
   }
}

function str2console($str, $now=false)
{
   if ($now) {
      echo "<script type='text/javascript'>\n";
      echo "//<![CDATA[\n";
      echo "console.log(", json_encode($str), ");\n";
      echo "//]]>\n";
      echo "</script>";
   } else {
      register_shutdown_function('str2console', $str, true);
   }
}

用法:var2console($myvar, '$myvar');或简称var2console($myvar);

很少需要将$now参数设置为true,从而导致<script>标记的立即输出。使用register_shutdown_function()的好处是您无需关注HTML中的“您所在的位置”。

json_encode()保留从PHP到JavaScript的传输中的所有字符。唯一需要注意的是:json_encode()仅适用于UTF-8(无论如何,这是大多数情况下推荐的编码)。如果您使用不同的编码,则可能需要utf8_encode()mb_convert_encoding()之类的内容(或者更确切地说,您可以考虑切换到UTF-8)。

Firebug控制台的输出只是var_export()的输出,前面是变量的类型,包括字符串的长度和数组的数量,以及可选的变量名称。 / p>

var_export()提供比var_dump()更可读的输出。如果你真的需要var_dump()的输出,你可以使用这样的东西:

function dump2console($var, $name='', $now=false)
{
   ob_start();
   if (strlen($name)) {
      echo "$name =\n";
   }
   var_dump($var);
   $str = ob_get_clean();
   str2console($str, $now);
}

用法:dump2console($myvar, '$myvar');或简称dump2console($myvar);

你应该避免使用循环引用(var_dump()检测到它们的步骤太晚了,var_export()根本没有检测到它们。这是如何做到的,例如$GLOBALS

function globals2console($now=false)
{
   $g = $GLOBALS;
   $g['GLOBALS'] = '(recursion)';
   var2console($g, '$GLOBALS', $now);
}

答案 2 :(得分:5)

<script>console.log( <?= json_encode( $var ) ?> )</script>

把帽子扔进戒指。听起来FirePHP是最好的方式。

答案 3 :(得分:4)

FirePHP做得很好+你可以在开发Ajax时使用它。

示例代码:

require_once('FirePHPCore/fb.php'); # add the library

fb($var); #log the variable
fb( var_export($var,true) ); # log the variable with the var_export format

如果您要将数组传递给它,可以从控制台中单击它,它将在您的屏幕上打开一个弹出窗口。您甚至可以展开/折叠数组和对象。

修改 如果您正在查找数据类型和长度,请使用var_dump()

fb( var_dump( array(
    1,
    'a',
    true
  ) ) );

答案 4 :(得分:2)

我总是将此脚本与Zend_Log_Writer_Firebug结合使用(使用firephp http://www.firephp.org/),因为在应用程序重定向或ajax请求后,使用xdebug调试并不总是按预期工作:

require_once '/Zend/Log.php';
require_once '/Zend/Log/Writer/Firebug.php';  
require_once '/Zend/Controller/Response/Http.php';
require_once '/Zend/Controller/Request/Http.php';

// create the logger and log writer
$writer = new Zend_Log_Writer_Firebug();
$logger = new Zend_Log($writer);

// get the wildfire channel
$channel = Zend_Wildfire_Channel_HttpHeaders::getInstance();

// create and set the HTTP response
$response = new Zend_Controller_Response_Http();
$channel->setResponse($response);

// create and set the HTTP request
$channel->setRequest(new Zend_Controller_Request_Http());

// record log messages
$logger->info('test');
$logger->info(var_export($_SESSION,true));
$logger->info(count(var_export($_SESSION,true)));
$logger->info(strlen(var_export('hello',true)));
$logger->info(get_type($_SESSION,true));  

// insert the wildfire headers into the HTTP response
$channel->flush();

// send the HTTP response headers
$response->sendHeaders();

您可以构建自己的库以获取变量的类型:

<?php
function get_type($var) 
{
    if(is_object($var))
        return get_class($var);
    if(is_null($var))
        return 'null';
    if(is_string($var))
        return 'string';
    if(is_array($var))
        return 'array';
    if(is_int($var))
        return 'integer';
    if(is_bool($var))
        return 'boolean';
    if(is_float($var))
        return 'float';
    if(is_resource($var))
        return 'resource';
    //throw new NotImplementedException();
    return 'unknown';
}
?>

使用函数调用var_dump_ret作为$ logger-&gt; info()的参数也可能有帮助。我还没有测试过它。

function var_dump_ret($mixed = null) {
  ob_start();
  var_dump($mixed);
  $content = ob_get_contents();
  ob_end_clean();
  return $content;
}

答案 5 :(得分:2)

如果你只是想看看var_dump输入firebug(客户端)而没有在Javascript中做任何事情我会建议使用 cookies 以下举例说明如何以这种方式执行:

<?php
$str =  "Abu Romaïssae";

sendVarDumpToFront($str);

echo "<pre>";
echo $str."\n";

function sendVarDumpToFront( $mixed ){
    ob_start();
    var_dump($mixed);
    $content = ob_get_contents();
    ob_end_clean();
    setcookie("var_dump",$content);
}

比你在firebug中这样:

reading cookie content from Firebug

  

重要

     

因为这种方式使用cookie,你必须在输出任何内容之前放入var_dump内容,否则这将不起作用

答案 6 :(得分:1)

来自:http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/ Fb::log($array, "dumping an array") 这将为您提供类型和数据。你必须手动进行额外的记录,以获得长度/数量。

答案 7 :(得分:1)

以下内容将从var_dump()中获取任何内容,并在尝试将其发送到console.log()之前将其编码为JSON。这可以防止特殊字符弄乱输出。

<?php
$myArray = array('Red','Green','Blue','Orange','Yellow','Purple');

ob_start();
var_dump($myArray);
$var_dump = ob_get_contents();
ob_end_clean();
?>

<script>
var var_dump = <?php echo json_encode($var_dump); ?>;
console.log(var_dump);
</script>

答案 8 :(得分:1)

如果你有一个使用var_dump()生成输出的Ajax(XHR)调用,那么你可以在'Console''Net'下检查FireBug中的请求。 STRONG>。 点击加号将其展开,然后查看'响应'标签。

否则,如果您将var_dump()放入正在查看的主页面中,它应该只显示在页面中,尽管格式可能会混乱。试试

echo '<PRE>' 
在var_dump()之前

或者查看页面源而不是直接输出。

答案 9 :(得分:1)

我认为实现这一目标的一个简单方法就是做一个简单的

console.log(<?php var_export($var, true) ?>);

答案 10 :(得分:1)

你过度复杂化了一个简单的问题。 Firebug(以及任何其他控制台/ dom日志查看器用于查看客户端输出.PHP是服务器端,并且没有多大意义推送到控制台日志。

话虽如此,如果您真的想将服务器端输出传递给控制台日志,您应该将该输出转换为json并将其传递到控制台日志。如果您只是想在生命站点上输出变量值而没有人知道您正在使用它(并且您不应该在实时版本上工作但是除此之外)为什么不将输出传递给文件并读取无论你喜欢哪种输出,你甚至可以使用ajax通过jquery将转储传递给日志。

我想说的是......你过分复杂了你想要做的事情。

答案 11 :(得分:-1)

仅从JavaScript jquery 从firebug和chrome中的数组是:

 console.dir('[object arrays]'); 

打开控制台并激活到F12 ...... 并在控制台中编写此代码是从jquery到php的var_dump。数组到json

var test = {"names":["john doe","JANE doe"],"ids":["123",null]}; console.dir(test);

如果你需要直接控制台PHP需要一个插件