Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха информатор 3.1
Еще более удобное оповещение о флуде!

Краснодарское время: 24 Май, 2012, 11:21:23

Страниц: [1] 2
Печать
Автор Тема: Аналог var_export ?  (Прочитано 549 раз)
0 Пользователей и 1 Гость смотрят эту тему.
artoodetoo    ↓ 
14 Сентябрь, 2010, 07:50:37
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

Подскажите как в JS красиво вывести произвольные данные (отладка) чтобы не тупо писала "object", а попыталась развернуть массив скажем. В PHP я пользую var_export или var_dump, а здесь как?
Прошу jQuery + плагины не предлагать. Что-нибудь простое.
 
Типа:
Text

document.write(mydump(data));
 
Записан
phpdude    ↓ 
14 Сентябрь, 2010, 07:59:22 , спустя 8 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20790
Сила слова: 1.65

artoodetoo, напиши mydump и выложи тут заодно :)
 
я обычно делаю console.log - от файрбага консоль и там уже просматриваю "дерево" объекта
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
artoodetoo    ↓ 
14 Сентябрь, 2010, 08:00:41 , спустя 1 минуту 19 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

phpdude, я то надеялся, что ты уже написал mydump() )))
Записан
phpdude    ↓ 
14 Сентябрь, 2010, 08:02:29 , спустя 1 минуту 48 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: д-о-х-у-я!
Сила слова: 1.65

artoodetoo, люблю когда меня спрашивают прилюдно, мог в личку спросить ))))))))))) неа не написал, думал пару раз, да обошелся firebug консолью
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
artoodetoo    ↓ 
14 Сентябрь, 2010, 09:43:02 , спустя 1 час 40 минут 33 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

Javascript

function dump(varval, varname)
{
  var text = '';
  var padding = '';
 
  if (typeof(dump.level) == 'undefined') dump.level = 0;
  dump.level++;
  for(var j = 1; j < dump.level; j++) padding += '  ';
 
  text = padding;
  if (typeof(varname) != 'undefined') {
    text += '"' + varname + '"' + ': ';
  }
 
  if (typeof(varval) == 'object') {
    text += '{\n';
    for (var key in varval) {
      var val = varval[key];
      text += dump(val, key);
    }
    text += padding + '},\n';
  } else {
    text += '"' + varval + '"' + ',\n';
  }
 
  dump.level--;
  return text;
}
 
Записан
mario    ↓ 
14 Сентябрь, 2010, 09:58:14 , спустя 15 минут 12 секунд
НЕ ХУЕТА! ХУЕТА!

wazzup
Группа: Джедаи

Карма: 67
Сообщений: 6162
Сила слова: 1.09

в мемориз! :)
А то порой заебывает консоле.лог )))
Спустя 7 секунд добавил
спасибо!
Записан

с ув. mario.
Контакты
artoodetoo    ↓ 
14 Сентябрь, 2010, 10:29:20 , спустя 31 минуту 6 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

велосипед:
сохраняем дебугинфу в формате json
PHP

<?php
 
class QbApp
{
 
function end()
{
    $time  = microtime(TRUE);
    $start = Qb::get('start');
 
    $data = array(
        'request' => $_SERVER['REQUEST_METHOD'] . ':' . $_SERVER['REQUEST_URI'],
        'at'      => gmdate('r', $start),
        'time'    => $time - $start,
        'log'     => QbLog::get(),
    );
 
    $fileName = dirname(__FILE__) . '/../log/' . $start . '.txt';
    file_put_contents($fileName, json_encode($data));
}
 
}
 

Где-то в шаблоне выводится ссылка на viewdebug.php?id=xxx
а вот viewdebug.php
PHP

<?php
 
if (!isset($_GET['id']) || strspn($_GET['id'], '1234567890.') != strlen($_GET['id'])) {
    die('Wrong id');
}
 
$file = './log/'.$_GET['id'].'.txt';
if (!file_exists($file)) {
    die('Log not found');
}
$data = file_get_contents($file);
 
?>
<script type="text/javascript">
var data = <?php echo $data ?>;
 
function dump(varval, varname)
{
  var text = '';
  var padding = '';
 
  if (typeof(dump.level) == 'undefined') dump.level = 0;
  dump.level++;
  for(var j = 1; j < dump.level; j++) padding += '  ';
 
  text = padding;
  if (typeof(varname) != 'undefined') {
    text += '"' + varname + '"' + ': ';
  }
 
  if (typeof(varval) == 'object') {
    text += '{\n';
    for (var key in varval) {
      var val = varval[key];
      text += dump(val, key);
    }
    text += padding + '},\n';
  } else {
    text += '"' + varval + '"' + ',\n';
  }
 
  dump.level--;
  return text;
}
 
</script>
 
<h1>Debug info</h1>
 
<script type="text/javascript">
document.write('<b>Request</b>: ' + data['request'] + '<br/>\n');
document.write('<b>At</b>: ' + data['at'] + '<br/>\n');
document.write('<b>Exec. time</b>: ' + data['time'] + ' sec<br/>\n');
document.write('<h2>Log</h2><pre>' + dump(data['log']) + '</pre>');
</script>
 


fullsize screenshot
результат
« Последнее редактирование: 14 Сентябрь, 2010, 10:28:33 от artoodetoo » Записан
adw0rd    ↓ 
14 Сентябрь, 2010, 11:38:14 , спустя 1 час 8 минут 54 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17623
Сила слова: 1.67

да ну нафиг, мне console.log() хватает... не люблю я лишние библиотеки встраивать
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
artoodetoo    ↓ 
14 Сентябрь, 2010, 12:32:36 , спустя 54 минуты 22 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

хозяин барин. мне вот понадобилось
Записан
artoodetoo    ↓ 
14 Сентябрь, 2010, 12:59:33 , спустя 26 минут 57 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

я js почти не трогаю, так, по крайней необходимости. в console.log мне не нравится, что эта штука везде кроме FF+FireBug будет порождать ошибку. а когда отлаживаешся, постоянно переключаешся FF->Opera->IE и по кругу. некузяво жить с ошибками
Записан
artoodetoo    ↓ 
26 Сентябрь, 2010, 10:16:25 , спустя 11 дней 21 час 16 минут 52 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

UP
 
Захотелось мне выводить время генерации страницы и всякие логи прямо на самой странице. Получил проблему курицы и яйца: в момент рендеринга страницы я еще не обладаю всей нужной инфой.
 
Выручает JavaScript. Реальную инфу я могу сохранять во внешний файл в своем обработчике shutdown или в деструкторе объекта приложения, что один хрен.
А во время рендеринга мне достаточно знать id этого сеанса. Браузер за меня обратится к js с отладочной инфой и через document.write() всё отрисует.
 
HTML

<script type="text/javascript" src="js/dump.js"></script>
<script type="text/javascript" src="<?php echo $app->debugFile ?>"></script>

Здесь  $app->debugFile имя файла с данными в формате JSON, имя включает в себя microtime() для уникальности.
 
И никакого AJAX не понадобилось :)
К.О. торжествуе!
 

* jsondebug.zip (1.81 Кб - загружено 21 раз.)
« Последнее редактирование: 26 Сентябрь, 2010, 10:16:25 от artoodetoo » Записан
Абырвалг    ↓ 
26 Сентябрь, 2010, 01:23:29 , спустя 3 часа 7 минут 4 секунды
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

а ведь можно повесить listener на отдачу ответа классом Response
в теле handler'а, который будет обрабатывать ответ будет находиться что-то типа
PHP
str_ireplace('</body>', $toolbar . '</body>', $response->getContent());
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
artoodetoo    ↓ 
26 Сентябрь, 2010, 02:01:35 , спустя 38 минут 6 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

я не понял. или ты не понял
Записан
Абырвалг    ↓ 
26 Сентябрь, 2010, 02:15:00 , спустя 13 минут 25 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

Получил проблему курицы и яйца: в момент рендеринга страницы я еще не обладаю всей нужной инфой.
после рендеринга но перед отдачей ответа пользователю проходишься поиском и заменой по телу ответа и вставляешь свои логи и время генерации (я в прошлом сообщении это показал).
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
artoodetoo    ↓ 
26 Сентябрь, 2010, 02:42:40 , спустя 27 минут 40 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

здесь много "если"
 
- да я написал "рендеринг страницы", но не факт, что я буду отдавать html. а логи желательно сохранять в любом случае
 
- смотря что я хочу замерить. в идеале я меряю время до exit(). в твоем случае - до конца работы шаблонизатора. это близко, но опять не факт. зависит от структуры приложения
 
- кто сказал что у меня  есть объект response и вообще что я в явную использую буферизацию
 
слишком много зависимостей.
Записан
Страниц: [1] 2
Печать
 

Перейти в: