Отправка "var dump" на консоль FireBug
Как известно var_dump()
помимо значения показывают его тип данных и длину.
Есть ли способ записать его вывод в FireBug console ?
Я пробовал 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);
Очень редко бывает необходимо установить параметр
$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); }
Вы можете сбросить 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'); ?> -->
Затем вы можете просмотреть источник или проверить элемент.
Просто бросаю свою шляпу на ринг. Похоже, что FirePHP-это лучший способ уйти.<script>console.log( <?= json_encode( $var ) ?> )</script>
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 ) ) );
Я всегда использую этот скрипт в сочетании с 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
выход, помещенный в 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 таким образом:
Важно
Поскольку этот способ использует файлы cookie, вам придется поместить содержимое var_dump перед выводом любого содержимого, иначе это не будет работать
Откуда: 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'. щелкните знак плюс , чтобы развернуть его и посмотреть на вкладку "Ответ" .
В противном случае, если вы помещаете var_dump() на главную страницу, которую вы просматриваете, он должен просто появиться на странице как просмотренный, хотя форматирование может быть испорчено. Попробуйте
echo '<PRE>'
Перед var_dump () или в качестве альтернативы можно просмотреть источник страницы, а не прямой вывод.
Я думаю, что один из простых способов достижения этой цели-сделать простой
console.log(<?php var_export($var, true) ?>);
Вы слишком усложняете то, что является простым вопросом. Firebug (и любой другой console/dom log viewer предназначен для просмотра вывода на стороне клиента. PHP является серверной частью и не имеет особого смысла нажимать на журнал консоли.
С учетом сказанного, если вы действительно хотите передать вывод на стороне сервера в журнал консоли, вы должны преобразовать этот вывод в json и передать его в журнал консоли. Если вы просто хотите вывести значения переменных на сайте life, не давая людям знать, что вы работаете над ним (и вы все равно не должны работать над живой версией, но это к делу не относится) почему бы не передать вывод в файл и не прочитать этот вывод, как вам нравится, вы можете даже использовать ajax для передачи дампа в журнал через jquery.
Вот что я пытаюсь сказать...вы слишком усложняете то, что пытаетесь сделать.
Только из JavaScript a 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 нужен плагин