Отправка "var dump" на консоль FireBug

Как известно var_dump() в дополнение к значению показать его тип данных и длина.

есть ли способ зарегистрировать его вывод в консоль FireBug?

пробовал FirePHP и FireLogger но оба выводят только значение переменной (иногда даже неправильное значение переменной).

12 ответов


может быть, вам нужно что-то вроде этого:

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);

очень редко необходимо устанавливать до true, вызывая немедленный вывод <script> tag. Преимущество использования register_shutdown_function() это то, что вам не нужно обращать внимание на "где вы находитесь" в HTML.

на json_encode() сохраняет все символы при передаче с PHP на Яваскрипт. Единственное предостережение касается кодирования:json_encode() работает только с UTF-8 (что в большинстве случаев является рекомендуемой кодировкой). Вам может понадобиться что-то вроде utf8_encode() или mb_convert_encoding() если вы используете другую кодировку (или, скорее, вы можете переключиться на UTF-8).

выход на консоль Firebug-это просто выход var_export(), которому предшествует тип переменной, включая длину строк и количество массивов и, необязательно, по имени переменной.

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);
}

вы можете сбросить JavaScript на консоль, поместив консоль.log () в теге скрипта:

<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');
?>
-->

затем вы можете посмотреть источник, или проверить элемент.


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

просто бросаю шляпу на ринг. Похоже, что FirePHP-лучший способ пойти.


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

Если вы передаете ему массив, вы можете щелкнуть его с консоли, и он откроет всплывающее окно на экране. Вы даже можете развернуть/свернуть массивы и объекты.

EDIT: Если вы ищете типы данных и длину, используйте var_dump().

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

Я всегда использую этот скрипт в сочетании с 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 - >info () также может быть полезно. Я не проверял его еще.

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

Если вы просто хотите увидеть var_dump out положить в firebug (сторона клиента) без каких-либо действий в Javascript Я бы рекомендовал использовать печенье ниже приведен пример того, как вы можете выполнить это таким образом:

<?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

важно

так как этот способ использует куки, вам придется поместить содержимое var_dump перед выходом любого контент, в противном случае это не будет работать


From:http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/ Fb::log($array, "dumping an array") Это даст вам тип и данные. Вам нужно будет сделать дополнительное ведение журнала вручную для длины / подсчета.


следующее возьмет что-нибудь из var_dump() и закодирует его в 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>

Если у вас есть вызов Ajax (XHR), который генерирует вывод с помощью var_dump (), то вы можете проверить запрос в FireBug либо под 'Console' или 'Net'. нажмите знак "плюс" чтобы развернуть его и посмотреть на 'Response' tab.

в противном случае, если вы помещаете var_dump() на главную страницу, которую вы просматриваете, она должна просто появиться на странице, хотя форматирование может быть испорчено. Пытаться

echo '<PRE>' 

перед var_dump () или альтернативно просмотрите источник страницы, а не прямой вывод.


Я думаю, что один простой способ достичь этой цели-сделать простой

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


вы усложняете то, что является простой проблемой. Firebug (и любой другой просмотрщик журналов консоли / dom предназначен для просмотра вывода на стороне клиента. PHP является серверной стороной и не имеет большого смысла нажимать на журнал консоли.

с учетом сказанного, если вы действительно хотите передать вывод на стороне сервера в журнал консоли, вы должны преобразовать этот вывод в json и передать его в журнал консоли. Если вы просто хотите выводить значения переменных на сайт life, чтобы люди не знали, что вы работая над этим (и вы все равно не должны работать над живой версией, но это не имеет значения), почему бы не передать вывод в файл и не прочитать этот вывод, как вам нравится, вы даже можете использовать ajax для передачи дампа в журнал через jquery.

то, что я пытаюсь сделать...вы слишком усложняете то, что пытаетесь сделать.


только из JavaScript jquery Из массивов в firebug и chrome есть:

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

откройте консоль и активируйте F12... и написать этот код в консоли-это var_dump на php от jquery. массив для json

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

Если вам нужна непосредственно консоль fron PHP нужен плагин