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

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

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

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

 Abu Romaïssae09 мар. 2013 г., 21:14
вам нужно, чтобы он был в консоли? любое место, где вы можете увидеть это с помощью firebug?
 Youn Elan03 мар. 2013 г., 20:32
если это строка, console.log (string) и если это массив, как насчет json_encode ($ variable) в первую очередь
 j0k03 мар. 2013 г., 16:12
@PHPst Вы используете фреймворк или что-то?
 j0k03 мар. 2013 г., 17:04
Для меня этос видом "положить вещи внутри, что они могутт ", Firebug предназначен для обработки того, что происходит на стороне клиента: css, html, js, event, xhr и т. Д., А не на стороне сервера. Обычно хорошие рамки дают возможность видеть, что происходит на их стороне, когда она создает страницу. Для этого у Symfony, Django, ZF и т. Д. Есть веб-панель для отладки. Это'с видомfirebug для серверной части, То, что я рекомендую вам сделать вместо того, чтобы иметь одно место, чтобы увидеть рендеринг и отладку на стороне сервера, это тоже положилоvar_dump() (может бытьvar_export(..., true) может быть лучше) внутри файла журнала и хвост этого файла
 hakre07 мар. 2013 г., 17:48
Я думаю, что вы должны быть более конкретными, почему FirePHP или FireLogger не 'Я делаю всю работу за вас, потому что эти два инструмента предназначены именно для этого случая.
 Walter Tross10 мар. 2013 г., 22:01
Спасибо за щедрость. Если что-то нужно исправить или улучшить, просто дайте мне знать. Чтобы ответить другим людямВопросы о FirePHP и FireLogger: помимо необходимости иметь дополнительный плагин, который может порвать со следующей версией Firefox, оба нуждаются в буферизации вывода, потому что они общаются через заголовки HTTP. Включение буферизации вывода может вызвать неприятные сюрпризы (и, к сожалению, часто не сразу), как только вы отключите его.
 Sujit Singh21 февр. 2013 г., 06:38
вы пробовали отладчик? как xdebug?
 PHPst21 февр. 2013 г., 06:40
@SujitSingh Я хочу, чтобы вывод выводился на консоль, когда вы разрабатываете приложение MVC, вы не можете видеть вывод xdebug, когда он вызывается из контроллеров или моделей.
 PHPst03 мар. 2013 г., 16:30
@ j0k Я использую платформу Phalcon. Но вопрос в общем
 PHPst11 мар. 2013 г., 05:14
@WalterTross Добро пожаловать. ◕‿◕
 RRikesh21 февр. 2013 г., 07:12
обновил мой ответ

Ответы на вопрос(12)

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
  ) ) );
 PHPst21 февр. 2013 г., 10:25
Вы проверяли свой ответ, прежде чем опубликовать его? fb (var_export ($ var, true)); только повторяет ценность!
 PHPst10 мар. 2013 г., 15:10
Выходыfb($var);а такжеfb( var_export($var,true) ); идентичны для меня.
 RRikesh21 февр. 2013 г., 10:39
Да, это повторяет значение в консоли браузера. если вы хотите, чтобы он был кликабельным и всплывающим, вы должны передать его как массивfb( array( var_export($var,true) ), 'TEST TITLE' );
Решение Вопроса

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, вызывая немедленный выход тег. Преимущество использования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);
}

 Walter Tross13 мар. 2013 г., 08:55
@PHPst только для того, чтобы полностью контролировать. Я предпочитаю bool, а не boolean, float, а не double (и, кто знает, может быть, вы предпочитаете int вместо integer) - и более того, мне уже нужноifs для добавления длины строк и количества массивов.
 PHPst12 мар. 2013 г., 20:44
Почему ты не использовалgettype() для определения типа переменной легко?
<script>console.log( <?= json_encode( $var ) ?> )</script>

будто FirePHP - лучший путь.

 iPadDeveloper201108 окт. 2013 г., 03:12
Это отличный ответ. Обратите внимание, что

что один простой способ достичь этой цели - это сделать простой

console.log();

ый / dom log viewer предназначен для просмотра выходных данных на стороне клиента. PHP на стороне сервера и неНе имеет смысла нажимать на журнал консоли.

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

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

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

который генерирует вывод с помощью var_dump (), то вы можете проверить запрос в FireBug либо в 'Приставка' или же 'Сеть'.Нажмите знак плюс расширить его и посмотреть наОтклик' Вкладка.

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

echo '
' 

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

если вы просто хотите увидетьvar_dump положить в 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 таким образом:

ВАЖНЫЙ

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

 PHPst10 мар. 2013 г., 05:57
Спасибо за вашу новую идею.

поместив 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');
?>
-->

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

 PHPst04 мар. 2013 г., 18:57
Это не практично в MVC
 Karma05 мар. 2013 г., 12:11
Я поддержу ваш ответ. Точно к чему я собирался написать.
 Walter Tross10 мар. 2013 г., 02:45
в моем PHP var_dump ('а») являетсяstring(3) "abc", который уже нарушает код, но любой массив также нарушает его из-за новых строк.
 Mark05 мар. 2013 г., 07:23
Тогда еще один хороший вопрос может быть, как сделать это практичным в MVC. Это хорошо для тестирования и получения значений, но если вы хотите использовать его в работе, вам, вероятно, стоит рассмотреть покрытие вашего php для json, чтобы вы могли правильно обработать его в JavaScript.

используя firephphttp://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;
}
 chris13 мар. 2013 г., 10:33
На немецкой странице документации gettype php есть предупреждение:php.net/manual/de/function.gettype.php - переведенопо соображениям производительности " ;-).
 PHPst13 мар. 2013 г., 09:51
Спасибо, почему вы не использовали gettype () для определения типа переменной легко?
 chris18 апр. 2013 г., 11:42
get_type () - определенная пользователем функция - gettype () - функция php. Подчеркивание важно.

прежде чем пытаться отправить его в 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>

 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 нужен плагин

 PHPst21 февр. 2013 г., 10:21
Вы правильно прочитали вопрос? Это'о PHP!

Ваш ответ на вопрос