Подтвердить что ты не робот

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

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

Есть ли способ записать свой вывод в консоль Firebug?

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

4b9b3361

Ответ 1

Возможно, вам нужно что-то вроде этого:

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(), которому предшествует тип переменной, включая длину строк и количество массивов и, необязательно, имя переменной.

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

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

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

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

Ответ 3

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

Просто бросаю шляпу в кольцо. Похоже, FirePHP - лучший способ пойти.

Ответ 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

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

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

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

Ответ 5

Я всегда использую этот script в сочетании с 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;
}

Ответ 6

если вы просто хотите, чтобы 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

ВАЖНО

так как этот способ использует файлы cookie, вам придется поместить содержимое var_dump перед выдачей какого-либо контента, иначе это не будет работать.

Ответ 8

Следующее возьмет что-нибудь из var_dump() и закодирует его в JSON, прежде чем пытаться отправить его в console.log(). Это предотвращает и специальные символы от испортить вывод.

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

Ответ 9

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

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

echo '<PRE>' 

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

Ответ 10

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

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

Ответ 11

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

С учетом сказанного, если вы ДЕЙСТВИТЕЛЬНО хотите передать вывод на серверной стороне в консольный журнал, вы должны преобразовать этот вывод в json и передать его в журнал консоли. Если вы просто хотите вывести значения переменных на жизненном сайте, не зная, что вы работаете над ним (и вы не должны работать над версией в реальном времени, но это не так), почему бы не вывести вывод в файл и прочитать который выводит, как вам нравится, вы даже можете использовать ajax для передачи дампа в журнал через jquery.

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

Ответ 12

только из 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 нужен плагин