Отправка "var_dump" в консоль FireBug
Как вы знаете var_dump()
в дополнение к значению, укажите его тип данных и длина.
Есть ли способ записать свой вывод в консоль Firebug?
Я попробовал FirePHP и FireLogger, но оба отображают только значение переменной (иногда даже неправильное значение переменной).
Ответы
Ответ 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 перед выдачей какого-либо контента, иначе это не будет работать.
Ответ 7
От: http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/
Fb::log($array, "dumping an array")
Это даст вам тип и данные. Вам нужно будет выполнить дополнительную запись вручную для длины/подсчета.
Ответ 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 нужен плагин