Альтернатива firePHP

    Пару недель решил взяться за изучение PHP и спустя какое-то количество времени отлаживать скрипты через echo стало неудобно. Вспомнил о существовании такой вещи как firePHP, почитал документацию, скачал, поставил, обрадовался. Ведь так классно отлаживать скрипты через консоль!
    Но увы, по непонятным мне причинам («X-Wf-» заголовки доходят, а все равно «no messages in Firebug Console»*), не заработал. Посмотрел в интернете — безуспешно, пришлось самому решать проблему.

    Решение представляет собой PHP интерфейс к консоли фаербаг, посредством генерации javascript кода.

    Собственно исходник:
    class debug {

      private $code = "<script type="text/javascript" id="debug">(function(){",
      $timers = array (),
      $counter = 0,
      $vars = array();

     function debug() {
      $this->allow = true;
     }

     /* Вывести все в консоли */
     public function end() {
      if ($this->allow){
       if(sizeof($this->vars) > 0){
        $dump = 'function dump(a,b){var c="";if(!b)b=0;var d="";for(var j=0;j++<=b;)d+=" ";if(typeof(a)==\'object\'){for(var e in a){var f=a[e];if(typeof(f)==\'object\'){c+=d+"\'"+e+"\' ...\n";c+=dump(f,b+1)}else{c+=d+"\'"+e+"\' => \""+f+"\"\n"}}}return c}';
        $this->code .= $dump;
       }
       echo $this->code."})();</script>";
      } else return null;
     }

     /*
      * Группировка
      */
     public function group($name) { 
      $this->code .= "console.group('".$name."');";
      return $this
     }

     public function groupEnd() {
      $this->code .= "console.groupEnd();";
      return $this;
     }

     /*
      * Начало запуска таймера
      */
     public function time($name) {
      $mtime = microtime();
      $mtime = explode(' ', $mtime);
      $mtime = $mtime[1]+$mtime[0];
      $this->timers[$name] = $mtime;
      return $this;
     }

     /*
      * Остановка таймера
      */
     public function timeEnd($name) {
      $timeStart = $this->timers[$name];
      if ($timeStart) {
       $mtime = microtime();
       $mtime = explode(" ", $mtime);
       $mtime = $mtime[1]+$mtime[0];
       $endtime = $mtime;
       $totaltime = $endtime-$timeStart;
       $this->info("$name: $totaltime seconds");
       $this->timers[$name] = null;
      }
      return $this;
     }

     /*
      * Сообщения в консоль
      */
     private function consoleType($msg, $mode) {
      if (is_string($msg))
       $msg = "'$msg'";
      
      if(is_array($msg)){
       $name = "o".($this->counter++);
       $this->code .= $this->js_hash($msg,$name);
       $this->code .= "console.".$mode."(dump(".$name."));";
      }
      
      if(!$name)
       $this->code .= "console.".$mode."(".$msg.");";
     }
     
     // Стандартное сообщение в консоль
     public function log($msg) {
      $this->consoleType($msg, "log");
      return $this;
     }
     // Сообщение об ошибке
     public function error($msg) {
      $this->consoleType($msg, "error");
      return $this;
     }
     // Сообщение предупреждения
     public function warn($msg) {
      $this->consoleType($msg, "warn");
      return $this;
     }
     // Сообщение со значком инфо
     public function info($msg) {
      $this->consoleType($msg, "info");
      return $this;
     }

     /*
      * Посмтроение объекта JS из PHP массива
      */
     private function js_hash($arr, $name, & $code = '') {
      if (!$this->vars[$this->counter]) {
       $code .= "var ";
       $this->vars[$this->counter] = true;
      }
     
      $code .= $name."={};";
     
      foreach ($arr as $key=>$value) {
     
       $outKey = (is_int($key))?'['.$key.']':".$key";
     
       if (is_array($value)) {
        $this->js_hash($value, $name.$outKey, $code);
        continue ;
       }
     
       $code .= $name.$outKey."=";
     
       if (is_string($value)) {
        $code .= "'".$value."';";
       } else if ($value === false) {
        $code .= "false;";
       } else if ($value === NULL) {
        $code .= "null;";
       } else if ($value === true) {
        $code .= "true;";
       } else {
        $code .= $value.";";
       } 
      }
      return $code;
     }
    }



    Примеры использования:


    $d = new debug();

    // Создаем новый таймер
    $d->time('Timer');

    // Пишем в консоль приветсвенное сообщение :)
    $d->log("WELCOME!");

    // Создаем массив
    $arr = array();
    for($i = 0; $i < 6; $i++){
     $arr[] = "line #". $i;
    }

    // Выводим его в консоль
    $d->log($arr);

    $name = "Evgeny";
    $age = 18;

    // Массив посложнее
    $myHobbies = array (
     "films",
     "music" => array("full on", "psy", "dark"),
     "sports" => array(
      "extreme" => array("climbing","snowboard"),
      "diving",
      "karting"
     ),
     array(1,2,3,5,"sometxt")
    );

    // Делаем группу About
    $d->group("About");
     // В нее пишем имя и возраст
     $d->log("Hello, my name is $name");
     $d->log("and i am $age");
    $d->groupEnd();

    /* Или так:
    * $d->group("About")
    *  ->log("Hello, my name is $name")
    *  ->log("and i am $age")
    * ->groupEnd();
    */

    // Делаем группу с увлечениями
    $d->group("My hobbies");
     // Пишем заголовок
     $d->info("list of my hobbies");
     // выводим массив
     $d->log($myHobbies);
    // закрываем группу
    $d->groupEnd();

    // Вывовод в консоль со знаком info времени выполнение РНР скрипта
    $d->timeEnd('Timer');
    // Обязательно при завершении работы с классом
    $d->end();
    // или $d->timeEnd('Timer')->end();

    /* Примечание
    * После использования метода end(), для последущего
    * логирования нужно будет создавать новый объект класса,
    * поэтому лучше использовать этот метод в конце скрипта.
    */



    После вызова метода end(), в html документ добавиться следующий javascript код:
    (function(){console.log('WELCOME!');var o0={};o0[0]='line #0';o0[1]='line #1';o0[2]='line #2';o0[3]='line #3';o0[4]='line #4';o0[5]='line #5';console.log(dump(o0));console.group('About');console.log('Hello, my name is Evgeny');console.log('and i am 18');console.groupEnd();console.group('My hobbies');console.info('list of my hobbies');var o1={};o1[0]='films';o1.music={};o1.music[0]='full on';o1.music[1]='psy';o1.music[2]='dark';o1.sports={};o1.sports.extreme={};o1.sports.extreme[0]='climbing';o1.sports.extreme[1]='snowboard';o1.sports[0]='diving';o1.sports[1]='karting';o1[1]={};o1[1][0]=1;o1[1][1]=2;o1[1][2]=3;o1[1][3]=5;o1[1][4]='sometxt';console.log(dump(o1));console.groupEnd();console.info('Timer: 0.000530004501343 seconds');function dump(a,b){var c="";if(!b)b=0;var d="";for(var j=0;j++<=b;)d+=" ";if(typeof(a)=='object'){for(var e in a){var f=a[e];if(typeof(f)=='object'){c+=d+"'"+e+"' ...\n";c+=dump(f,b+1)}else{c+=d+"'"+e+"' => \""+f+"\"\n"}}}return c}})();


    А в консоли фаербаг мы увидим
    image

    ЗЫ
    Замечания, предложения по скрипту — в комментарии

    ЗЗЫ
    Чтобы все это работало нужен firefox и firebug
    Поделиться публикацией

    Похожие публикации

    Комментарии 132
      0
      good
        +1
        а зачем такой бубен если есть zend?
          –1
          и то верно — зенд дебаггер на сервер — и отлаживай как только хочешь и можешь :)
            +5
            Я пока не дошел до zend'a :/
              +1
              лично у меня, дебаггер от зенда жутко долго стартует, просто нереально… от 1 до 5 минут… за это время я все print_r'ом уже отдебажу
              дебаггер и студия последних версий
                0
                медленно
                  0
                  Еще очень неплох PHP Expert Editor, в нем довольно сильный дебагер

                  Да кстати вот что он может: (это не реклама — просто хороший продукт):
                  А вот здесь бесплатная регистрация PHP Expert editor, чтобы долго не искали:
                  www.ankord.com/ru/phpxedit_reg.php

                  О программе

                  PHP Expert Editor — удобный редактор для PHP, Perl, Python, HTML, Java Script и других файлов с поддержкой UTF-8. Программа разработана специально для PHP мастеров и имеет встроенный отладчик PHP. PHP Expert Editor имеет встроенный HTTP сервер и позволяет запускать PHP, Perl, Python, скрипты. Вы также можете использовать любой внешний HTTP сервер. Проверка синтаксиса PHP, встроенный браузер, FTP клиент с поддержкой SFTP, Кодовый и файл эксплорер, поддержка проектов, настраиваемые шаблоны кода, настраиваемая подсветка кода, и многие другие функции значительно облегчают работу разработчика.

                  Свойства программы
                  Поддержка UTF-8
                  Настраиваемая подсветка кода
                  Свертывание кода
                  Встроенный браузер
                  Встроенный FTP-клиент с поддержкой SFTP
                  Code Explorer
                  File Explorer с Избранными папками.
                  Project Explorer
                  Library Explorer
                  Настраиваемые горячие клавиши и клавиши работы в редакторе.
                  Клавиатурные макросы
                  PHP макросы
                  Авто сохранение
                  Проверка синтаксиса PHP
                  Запуск скриптов и просмотр результата во встроенном или внешнем браузере
                  Отладчик
                  Для запуска и отладки PHP скриптов Вы можете использовать встроенный или любой внешний HTTP-сервер
                  Поддержка всех известных Content-Type. Вы можете отлаживать скрипты, которые генерируют различный контент, например, картинки
                  Быстрая вставка всех функций PHP с подсказкой параметров
                  Быстрая навигация в коде с помощью горячих клавиш и мыши
                  Подсветка парных скобок
                  Настраиваемые Шаблоны Кода для быстрой вставки часто употребляемых фрагментов
                  Экспорт исходного текста в HTML и RTF с подсветкой синтаксиса
                  Закладки
                  Два стиля интерфейса — Classic и Office XP
                  Поддержка справки PHP с возможностью поиска по ключевому слову в текущей позиции
                  Keymaping (Default, Classic, Brief, Epsilon, Visual Studio)
                  Поддержка форматов файлов Windows, Unix, Mac
                  Поддержка Perl, Python, Ruby, Tcl. Есть возможность использовать несколько интерпретаторов, не только PHP.

                  Аппаратные требования
                  CPU: P-100
                  RAM: 64MB

                  Для использования PHP Expert Editor необходимо следующее программное обеспечение.
                  OS — Windows 98/ME/NT/2000/XP
                  PHP (для запуска и отладки скриптов)
                  MS Internet Explorer 5.x и выше

                  Примечание: PHP Expert Editor нормально работает без PHP, но Вы не сможете запускать и отлаживать скрипты без PHP.
                    +3
                    Честно говоря не понятна реакция на мой топик, аргументов опять не каких… опять детство какое-то… или тяжело осилить и прочитать?

                    Я написал такой длинный топик потому что не могу написать в блог (даже личный), после небольшой войны с кармадрочерами и прочими нехорошими редисками у меня просто не хавтает кармы.

                    А обзор по этому продукту я уже подготовил…
                      0
                      Я пользовался данным редактором когда только начинал изучать PHP, сейчас переполз на Eclipse PDT. Плюсанул комментарии.
                      0
                      он не имеет «свой» дебагер, использует внешний
                      очень сильно тормозит на больших файлах (у меня тормозил на большом файле xml)
                      как альтернативу eclipse рассматриваю только scite
                    +1
                    NOTE: You must have the Firebug Net panel enabled for FirePHP to work.
                      +1
                      Ну я же не совсем деревянный %)
                        0
                        ну, мало ли:) я вот только что прикрутил firephp к кейку, все пашет
                          0
                          Ещё необходимыми условиями работы firePHP является 5 версия PHP и включенная на сервере output_buffering (если я не ошибаюсь), или если её изменить не возможно, вы можете попробовать ob_start() перед выводом.

                          Для меня (Узнать почему не работает > Сделать костыли) :)
                            0
                            И ещё забыл упомянуть, если не нравится ZendDebugger, можно воспользоваться решением xDebug, у меня работает в zend studio for eclipse, я доволен. Удачи.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          –5
                          А что посоветуете?
                            0
                            наверно товарищ имел ввиду python и django :) тоже гуд
                              +4
                              Если совсем честно, для меня не очень понятна разница между «хорошим» и «плохим» языком. В большинстве веб-приложений от языка нужно умение работать с БД, сессиями, куками, изображениями, по крайней мере, в каком-то базовом варианте.

                              Теперь, внимание, вопрос. А чем пхп, собственно, плох? Да и сайтов\приложений написанных на нем меьше не становиться.
                                –3
                                я не говорю что он плох… сам на нем пишу
                                просто в нем много чего нет… к примеру многопоточности
                                и вход на порядок ниже чем в java

                                короче не заморачивайтесь, холивар меня тоже уже достала… это как с линем и форточками… во что много силы и средств вложат то и выжевет в вебе
                                  0
                                  Ну да, пожалуй
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      –2
                                      не сравнивайте php и java, языки разного уровня
                                      пыху еще очень далеко до монстра
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          да ладно
                                          я написал только один нюанс, а их не меньше 20
                                          не нужно ставить язык выше чем он есть и скрывать его недостатки только из-за того что что вы его любите или еще что-то
                                          я сам на нем пишу и знаю о его проблемах
                                          он не универсален даже в вебразработке
                                          это все просто смешно выглядит в сравнении с языками высоко уровня
                                          и никто не будет крепить костыли только из-за того чтобы писать на пыхыпы
                                          если можно взять пайтон и написать в два раза быстрее, к примеру парсер гугла
                                      –1
                                      Многопоточность — есть же pnctl модуль. Да и не только он наверняка.
                                        –1
                                        есть много костылей, как и классов так и модулей
                                        А я говорил о ВОЗМОЖНОСТЯХ ЯЗЫКА
                                        прежде чем комментировать хотя бы подумай о чем люди пишут
                                          0
                                          Мне, знаете ли, нечем думать :) Главное — прокомментировать.
                                            –1
                                            > Мне, знаете ли, нечем думать
                                            Я так и понял
                                            А потом заказчики бегают и жалуются на кодеров, которые советуют многопоточные парсеры писать на пыхыпы
                                            потому что хостинг не могут найти с момудами вашимы ))
                                      +1
                                      А для компаний важна скорость разработки, гибкость и стоимость поддержки кода.
                                      Приложений на нем сейчас пишется меньше: есть джанго, рельсы, а на горизонте где-то маячит скала.

                                      Вы видели отладку в джанго? А в пилонах — это же просто сказка!
                                        0
                                        Увы, нет. PHP — первый серверный язык который начал изучать, и то не очень давно.
                                        0
                                        а ведь ещё есть grails ;)
                                          0
                                          Твиттер, кстати, переписывают на скале.
                                          en.wikipedia.org/wiki/Scala_(programming_language)
                                            0
                                            ну, что такое скала — я знаю ;)
                                            думаю, для твиттера скала весьма неплохо подходит.
                                    –16
                                    Ruby или Java, если хочется чего-то серьезного. По сравнению с Ruby, PHP как язык выглядит инвалидом-дауном, особенно в ООП части. (Много надежд возлагается на 6-ую версию, но последняя новость на php.net — «PHP 4.4.9 released!», так что дела с 6-ой непонятны)
                                      0
                                      языки разного уровня сравнить не получится
                                        0
                                        Это последняя из 4й ветки, паралельно с ней развиваются 5 и 6 ветки. 6 php можно уже увидеть в appServ.
                                          –3
                                          Да но в appServ 2.6 dev транк. Вы рискнете делать сервис под большую нагрузку на dev-версии интерпретатора? А если там еще что-то поменяется в связи с исправлением какого-то бага и т. п. и т. д.?

                                          Конечно, я понимаю, что можно влезть в мэйлист, проанализировать реальное положение дел и принять решение об использовании шестёрки на основе этого — но не слишком ли много мороки из-за пхп? не проще ли взять стабильную проверенную версию руби и подходящего фреймворка? (rails, merb)

                                          P.S. Чтобы разъяснить — я не против пхп (6 лет на нем работал и один крупный сервис на нем остается до сих пор), просто факт на лицо — он теряет связь с действительностью. Как и любой взрослый язык он вынужден был долгое время обеспечивать обратную совместимость с проектами которые стартовали несколько лет назад. Это сильно задерживало прогресс.

                                          Единственный остающийся сильный плюс PHP — это обширная поддержка со стороны серверного ПО.
                                            –1
                                            > Единственный остающийся сильный плюс PHP — это обширная
                                            > поддержка со стороны серверного ПО.

                                            + стоимость разработки в пользу пыха
                                              –3
                                              Насчет стоимости — спорно. Если речь идет о рабочей силе, то из моего опыта: дешевые кодеры = больше времени + больше ошибок + больше претензий от пользователей и/или заказчика = больше затрат в итоге.

                                              А первоклассным программистам на самом деле пофигу на каком языке/фреймворке писать, т. к. все 1) ООП фреймворки похоже 2) все ООП языки похожи 3) выбор платформы зависит от самой задачи.
                                                +1
                                                1 2 3 пункты верно написали но…
                                                Я не о дешевых индуских кодерах говорю, а об стоимости программиста java и php
                                                я думаю тут даже спорить нет о чем…
                                                  –1
                                                  Java и PHP согласен на 100%.

                                                  Ruby и PHP — могу спорить, т. к. многие пхпшники переходят на руби под давлением паблисити — и их стоимость не сильно меняется (по крайней, мере не доростает до Java)
                                                    0
                                                    да ладно
                                                    вы так расказываете как будто на php нет серьезных проектов в сети
                                                    а как же yahoo?
                                                      0
                                                      не усмотрел в своих словах такое :) но хочу обратить внимание что я действительно писал: все крупные пхп-проекты достаточно старые, и платформа была отягощена давлением со стороны большого коммьюнити, которое требовало и обратную совместимость и эволюцию одновременно.

                                                      на пхп есть серьезные проекты, и, я уверен, они еще долгое время будут оставаться на нем написанными.

                                                      Только, если честно, я слабо верю, что яху собирается переходить на 5.3. Их главные странички наверняка сидят на 3. х. В больших компаниях стабильность превыше всего — никто не рискнет должностью чтобы и без того работающий сервис переводить на новую платформу.
                                                        –1
                                                        ну насколько мне известно они постепенно внедряют змея
                                                        но все равно с другой стороны если посмотреть пых фреймоворки тоже не плохо развиваются внедряя MVC и прочие прелести
                                                        конечно крупные сервисы гугл, туб и т. п. будут счас выбирать яву, пайтон, если мелколегкие яху купят си шарп… потому что пыху далеко… с этим я с вами согласен
                                                        но для небольшых порталов… визиток… блогов
                                                        зачем брать django, java, ror(хотя не уверен, потому что не работал с ним)?… если можно все быстро и достаточно безопасно сделать на ZF к примеру.
                                                        Ну это все имхо конечно
                                                          +1
                                                          Для визиток — сильно выигрывает голый пхп. Если говорить о ZF vs Rails, то вряд ли у ZF будет однозначное преимущество: оба фреймворка достаточно массивные и требуют определенной конфигурации перед кик-стартом.
                                              0
                                              Забыли самый главный плюс — простоту кода. Из чего следует и дешивизна поддержки, что в итоге оказывается решающим фактором для заказчиков.
                                                –1
                                                а чего сложного в рубиновом коде?
                                                  0
                                                  Думаю, ничего. Просто приближение PHP к cpp — наиболее очевидный, простой и понятный синтаксис, имхо.
                                                    –1
                                                    Мне он тоже ближе :)
                                                      0
                                                      мож ещё и темплейты цппшные? смарти будет нервно сосать причмокивая ;-)
                                                    0
                                                    Сравните хотя бы систему пэкэджей на Java и возможсноти __autoload()… Ну и прочее. Понимаете? ) На тему простоты и понятности кода.)
                                                0
                                                Я вам объясню: 4.4.9 — это последняя версия 4-го PHP. Финал. Дальше версий не будет.
                                                PHP5 разрабатывается оч давно. v 5.3 в альфе.

                                                А если хочется знать больше, но «нипанятна» — найдите роадмап. Может, прояснит :)

                                                ЗЫ: Вы ZF, Adept пробовали смотреть? Инвалидно, да? =))))
                                                  0
                                                  Вы говорите про фреймворк, я про сам язык. Согласитесь, так было бы некорректно сравнивать.
                                                    +2
                                                    Да, я говорю про фреймворки. Но они написаны на PHP.

                                                    Так вот вопрос — как получилось так, что были написаны hardcore-oop фреймворки на языке с ущербной ООП-парадигмой?
                                                      –1
                                                      Никто не сказал что она ущербная сама по себе. Просто *в сравнении* с более новыми языками (хотя на самом деле, исторически, руби более старый — с 93 г.) — пхп-шный подход к ООП выглядит устаревшим. Взять хотя бы рефлекшены PHP-Java-Ruby. Функционал везде почти одинаковый, но удобство использования в пхп явно уступает.
                                                    –1
                                                    Кстати, по совету посмотрел роудмэп по ПХП 6, разработчики обещают что в Unicode режиме многие string-функции будут на 300% медленнее. Валидно, да? =)))
                                                      0
                                                      Поживем — увидим. Не думаю, что все так страшно. Да и прочли Вы, скорее всего, роадмап, предложенный в марте 2007 года. Угадал? :)

                                                      ЗЫ: Вы значение слова «валидно» знаете? :)
                                                      0
                                                      Валидно в общем то, почему же нет. И даже в большинстве случаев приемлимо.
                                                      0
                                                      а могу ли я ZF использовать в коммерческих приложениях?
                                                    0
                                                    6-я версия это будет 5.3, но на юникоде. Так говорили по phpConf
                                                  +3
                                                  я б не сказал что пыхпых умирает
                                                  судя по количеству тендеров и стартапов на нем
                                                    +3
                                                    Язык не умирает не только потому, что на нем пишут. А еще и потому, что его развивают =)
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                    +1
                                                    Вообще говоря, мне кажется такая проблема надуманной. Ибо есть Zend Studio, в который входит Zend Debug. Есть xDebug, кстати.

                                                    А еще есть замечательные функции var_dump(), print_r(), die(). Уж не знаю, может я и маргинал, но три этих функции вполне хватает при написании скриптов и их дебага :)
                                                      +1
                                                      +1 за xDebug
                                                        +2
                                                        Поддерживаю, к print_r() у меня уже выработалась довольно сильная привычка, все никак не перейду на firephp или zend debug :)
                                                          –1
                                                          это называется качественное логирование? Для веб-сервисов? И куда выводить? Пользователю? И без фреймфорвков? Ил в консоль сервера? Просто print_r… да. %)
                                                            +1
                                                            wayly полностью поддерживаю

                                                            2 nileriver

                                                            можно и на email, я вот таким способом дебагю :)
                                                            set_error_handler('debuger');
                                                            // — function debuger() {
                                                            $args = func_get_args();
                                                            mail('', 'Debug from ', var_export($args, true));
                                                            }
                                                              0
                                                              а автоматическое логирование? а система событий? а многопоточное выполнение? а автоматизированые тесты на нагрузку? вы осилите 5000+ писем?)))))) блин это даже не смешно…
                                                                0
                                                                Забавно, а еще можно рсс ридеру скармливать :)
                                                              0
                                                              У меня, как у человека, изучающего пхп менее месяца, пока очень общее представление о языке, и что такое Zend Studio, Zend Framework, Zend Debug, Zend еще что-нибудь я пока не знаю
                                                            –2
                                                            Пишите Unit-тесты, дебаг не понадобится :)
                                                              0
                                                              Да, и было бы удобнее с таким интерфейсом:
                                                              Debug::log($object);


                                                              а также

                                                              Debug::startTimer();
                                                              ....
                                                              код
                                                              ...
                                                              Debug::stopTimer();// выводит значение в консоль


                                                              С группами
                                                              Debug::group($groupName, $object);


                                                              не забываем про статические методы:)
                                                                0
                                                                Во-первых, если я правильно понимаю пропадет chainability, то есть нельзя будет писать
                                                                $debug->log('header')->group('name')->log(1)->log(2)->groupEnd();

                                                                Во-вторых я не знаю что нужно сделать чтобы писать так (Debug::method)

                                                                В-третьих, про таймеры, им нужно имя, чтобы указывать какой остановить а какой нет.

                                                                Про группы, не очень понятно как при вашем варианте в группу написать еще 5 сообщений?
                                                                  +2
                                                                  Что то я не очень понимаю смысл цепочек. Подумайте, нужны ли они?

                                                                  с таймерами
                                                                  Debug::startTimer("a");
                                                                  ....
                                                                  Debug::startTimer("b");
                                                                  ...
                                                                  ...
                                                                  Debug::startTimer("b");
                                                                  ...
                                                                  Debug::stopTimer("a");


                                                                  с группами
                                                                  Debug::group('groupName', $object);
                                                                  Debug::group('groupName', 'сообщение1');
                                                                  Debug::group('groupName', 'сообщение2');
                                                                  ....
                                                                  Debug::group('groupName', 'сообщение N');
                                                                    0
                                                                    Цепочки иногда бывают удобны.

                                                                    Про группы. Не удобнее ли вс таки группу использовать как блок.

                                                                    Debug::group(«Группа 1»);

                                                                        // сообщение в родительскую группу

                                                                        Debug::group(«Вложенная группа»);

                                                                            // сообщение в дочернюю группу

                                                                        Debug::grorpEnd();

                                                                    Debug::grorpEnd();
                                                                      0
                                                                      Извините, про цепочки и группы все же не понимаю:) Моя многолетняя практика показала, что достаточно обычно одного метода (или однотипных error, debug, notice) Debug::info($object);
                                                                    0
                                                                    Во-вторых я не знаю что нужно сделать чтобы писать так (Debug::method)

                                                                    class Debug {
                                                                       public static function start_timer($timestamp_name)
                                                                       {
                                                                             //Если хотите обратится к другому свойсву или методу класа -- используйте self::stop_timer()
                                                                             self::timestamps[$timestamp_name][start] = microtime();
                                                                        }
                                                                    }
                                                                    


                                                                    Как то так
                                                                  0
                                                                  Поставьте пожалуйста в вырезке ява скрипта, там где длинная строка несколько энтеров. У меня в опере страницу растянуло по горизонтале…
                                                                    0
                                                                    Не понял, где именно? В исходнике класса или в примере какой код будет сгенерирован?
                                                                      0
                                                                      «После вызова метода end(), в html документ добавиться следующий javascript код:»
                                                                      5ая снизу строка.
                                                                    0
                                                                    Нормальная отладка и профилирование PHP. Это статьи на английском. На хабре есть переводы этих статей на русский.

                                                                    Обязательно прочитайте эти статьи, попробуйте «это». И вы сразу поймете, что ваши классы, да и firePHP тоже, могут понадобиться только для экстренной отладки кода на production-сервере.
                                                                      0
                                                                      +1 za xdebug
                                                                        0
                                                                        Честно говоря, у меня с xdebug'ом не работали в ZSE брейкпоинты. По xdebug_break() прерывание срабатывало, а вот из студии — нет. Смотрел лог xdebug'а, там команды нормальные: и BP передается, и step_into передается. Но останова не происходит. Побился я с ним час, погуглил. Ничего не вышло. Тогда плюнул, поставил Zend Debuger. Правда для профилирования приходится назад включать xdebug и выключать Zend — одновременно они работать не могут.
                                                                      +1
                                                                      Не понял, вы не смогли настроить FirePHP, поэтому написали свой???
                                                                        0
                                                                        Можно и так сказпть
                                                                          +2
                                                                          Удивляете. Что же будет если вы однажды не сможете настроить виндовс или линукс? :) :)
                                                                            0
                                                                            Позову друга — админа :)
                                                                        0
                                                                        Zend debug поможет «лучше»…
                                                                        Но если до него не дошли, советую обратить внимание на php expert editor, там в комплекте идет неплохой дебагер.
                                                                        Взять можно здесь
                                                                        Для пользоватлей СНГ — бесплатная регистрация
                                                                          0
                                                                          Где? :)
                                                                            0
                                                                            Сам пользуюсь PHP expert editor-ом, в принципе доволен, всё что нужно встроенный debug делает.
                                                                            И брейкпоинты и переменные, ну почти всё что нужно для отладки.
                                                                            Да и сам editor — вполне на уровне, самое главное на пользоватей СНГ — бесплатен (только зарегистрироваться надо на сайте), для буржуев платный.
                                                                            www.phpexperteditor.com
                                                                            www.ankord.com
                                                                              0
                                                                              Спасибо, посмотрю
                                                                            0
                                                                            Почему-то парсер habr-а сьел ссылку…
                                                                            даю в таком виде www.phpexperteditor.com
                                                                            или www.ankord.com
                                                                            0
                                                                            Представленное автором решение ничего нового в себе не несет, обычный дамп, только генерирующий жаваскрипт код для прямого управления файрбагом. ФайрПХП намного альтернативней, т. к. его дамп не изменяет «видимый» вывод данных со стороны сервера, а лишь добавляет свои заголовки. Преимущество очень ощутимо когда надо отладить или продампить данные и при этом ответ генерируемый сервером чувствителен к изменению — возрат данных в виде json, очень чувствителен скажем.

                                                                            Я бы на месте автора, лучше все таки разобрался почему firePHP не работает, может сервер заголовки рубает, может версии не те и т. д.
                                                                              –1
                                                                              Юзайте error.log, мля.

                                                                              function dump() {
                                                                              $message = "";
                                                                              foreach (func_get_args() as $var) {
                                                                              $message .= print_r($var, true). " ";
                                                                              }
                                                                              error_log($message);
                                                                              }

                                                                              и в php.ini

                                                                              log_errors = On
                                                                              error_log = /var/log/php/error_log

                                                                              Это всё, что надо для дебага кода.
                                                                                +2
                                                                                Почитайте что-ли, что такое отладка. Посмотрите, как происходит отладка в других языках (Java, C#). Тогда такие глупые мысли должны сразу отпасть.
                                                                                  0
                                                                                  Да-да, помню-помню. F7-F8 кнопачечки для перемотки построчной по исходнику. А в C#, слышал, даже назад можно перематывать! Вот оно — решение для реалтайм сервиса!
                                                                                    0
                                                                                    Дело не в переходах вперед-назад. Это лишь удобства. Главное — то, что во время останова вы имеете перед глазами «состояние» программы. Т. е. вы можете посмотреть значения всех переменных, стек функций, ходя по шагам можете найти ошибку. При отладке через dump (или log, что вобщем-то тоже самое, только еще хуже) для этого придется каждый раз править код перегружать страницу, что не сильно удобно (а познается это лишь в практическом сравнении) и очень утомительно.

                                                                                    На счет `решение для реалтайм сервиса`, может я неправильно вас понял, но вы отлаживаете на серверах в инете? Здесь речь идет об отладке на локальной машине или корпоратичном тест-сервере, но никак не в сети. В сети-то как раз и уместен лог. Но там уже не уместна отладка как таковая. Там строго логирование ошибок.
                                                                                      0
                                                                                      Это в идеале программу можно «заморозить» и долго рассматривать в лупу. В реальном мире бывают другие условия — например постоянно меняющийся трафик, логика, меняющаяся по мере поступления данных и т. п. Морозить там нечего, состояний нету, как таковых (есть, но они не интересны). Единственное что тут возможно — писать логи. Да, моя функция примитивная до безобразия. За хорошей реализацией отправлю в python, модуль logging.
                                                                                        0
                                                                                        Мы с вами говорим немного о разных вещах. Я говорю про отладку кода, а вы про логирование ошибок, частично профилирование, нагрузочное тестирование и другие виды опять же тестирования.
                                                                                          0
                                                                                          Ну я и говорю, что есть условия, в которых классическая отладка отладчиком просто невозможна. И веб-сервисы — один из таких случаев (конечно, от сервиса зависит).

                                                                                          P.S. Карма, сволочь, ну что ж ты плохая такая, дай уже закомментить… Ну зачем я в том треде про пых про питон упоминал…
                                                                                            0
                                                                                            Агрессивные тру-пхпшники наплевали в карму?
                                                                                            Интересно, если в посте о питоне написать про пхп — хоть кто-нибудь потянется минусовать?
                                                                                              0
                                                                                              По приколу, разве что. По-моему, питонисты неаггресивные совсем. В отличии от… )
                                                                                                0
                                                                                                Настоящие питонисты — они фанатики-идеалисты, старающиеся всё в коде вылизать до совершенства. Знаю таких (:
                                                                                                  0
                                                                                                  К флудоблудству на форумах это не имеет отношения :)
                                                                                                    +2
                                                                                                    Да, питонисты — тихие спокойные ребята, а пхп-шники — агрессивные дурачки, потому что:
                                                                                                    1) Питонисты и Рубироиды при каждом удобном случае лезут в топики про php и кричат, что php — гавно, а руби/питон — круто!

                                                                                                    2) На форумах и в IRC-чатах, когда кто-то задает вопрос `как это сделать в php/java/с++/c#` тут же находятся рубироиды и питонщики, которые кричат, что это не надо делать на данном языке, а надо делать на руби или питоне! А автор вопроса — мудак!

                                                                                                    3) Когда дается ответ на вопрос `как это сделать в php/java/с++/c#` в несколько строк кода, тут же находится довольный рубироид и пишет все в одну только ему понятную строчку и кричит `вот как все просто на руби, а вы мудаки все еще пишете на ХХХ`!

                                                                                                    Как же это уже раздражает…

                                                                                                    Ребята, если сидит компания из нескольких человек с пивом и обсуждает, как они хорошо съездили в Крым, не надо влазить в их беседу, объясняя, что Крым гавно, а Египет жжот. Есть большая вероятность, что вы получите в морду.
                                                                                                      –1
                                                                                                      Не поленились же столько букв написать — о чем? Никто не призывает всё бросить и все задачи решать рубями/питонами.
                                                                                                      А если новичку показали на альтернативы, за которые он сам же и поблагодарил, что в этом плохого?
                                                                                                      Хотя вам это, конечно же, не интересно. Гораздо лучше поучать кого-нибудь, упрекая в поучательстве, ага?
                                                                                                        +1
                                                                                                        Я щас напишу кратко, ага.

                                                                                                        Столько букв написано о том, что всякие лезут со своими «умными» советами куда не просят, а потом удивляются, что с кармой плохо.

                                                                                                        Все, даже самые новые новички, знают, что есть другие языки, кроме PHP. И вот если им надо будет совета по другим языкам, они его спросят. В данной ветке идет обсуждение PHP и нечего вообще упомянать что-то, что не имеет к PHP отношения.
                                                                                                          –1
                                                                                                          Спасибо, у меня вопросов больше нет, обещаю никому ни о чем не рассказывать, пока сами не попросят. Надеюсь, одним раздражителем для вас станет меньше.
                                                                                                          Извините.
                                                                                                            0
                                                                                                            Зато у меня есть вопрос, а точнее замечание. Хочу обратить ваше внимание на суть моих сообщений, которую вы, похоже, не уловили.

                                                                                                            Все вышенаписанное касается повествований в PHP-темах о достоиниствах Питона и пр. Но никто не мешает вам писать свои топики на эти темы, и «учить» в них новичков. Собственно для этого хабр и создавался. Вот учитывая это, ваша ирония выше совсем не уместна.
                                                                                                            0
                                                                                                            Ну и спасибо за плевок в карму. Я, конечно, сделал нечто ужасное.
                                                                                                              0
                                                                                                              Карма — средство выражения своего отношения к пользователю. Я крайне редко прибегаю к минусованию кармы, очень крайне редко. Но вот это сообщение как итог беседы натолкнуло на минус. Делайте выводы…

                                                                                                              Я переголосовал в карме, когда остыли эмоции и вижу, что человек вы вменяемый. Может в других топиках общение с вами окажется более толковым и соответствующем теме.
                                                                                          0
                                                                                          > может я неправильно вас понял, но вы отлаживаете на серверах в инете?

                                                                                          Нет, речь идёт об отладке сервисов на локальной машине. Сервисов, которые будут потом работать в инете и логгить ошибки в тот же лог теми же методами, только в конфиге будет не log=debug, а log=error
                                                                                    0
                                                                                    Для отладки в работе юзаю такую штуку. Примитивно, но зачастую вполне достаточно.

                                                                                    function _dump(&$v)
                                                                                    {
                                                                                    echo '
                                                                                    ';
                                                                                                var_dump($v);
                                                                                        echo '
                                                                                    ';
                                                                                    }
                                                                                      0
                                                                                      function _dump(&$v)
                                                                                      {
                                                                                      echo 'pre';
                                                                                      var_dump($v);
                                                                                      echo '/pre';
                                                                                      }

                                                                                      Сори, новичок, не совсем разобрался как с тегами постить.
                                                                                      0
                                                                                      Я смог прикрутить FirePHP к приложению на ASP.NET. Все отлично работает. Думаю, что автору стоит ещё раз почитать документацию FirePHP.
                                                                                      Не могу назвать эту разработку альтернативой FirePHP. Как ajax отлаживать?
                                                                                        +1
                                                                                        Между делом перенёс ваш модуль на Perl, заодно убрал кое-что лишнее.

                                                                                        Вот как переделан _to_console

                                                                                        =head1 PRIVATE METHODS

                                                                                        =over

                                                                                        =item B($msg, $mode)

                                                                                        Incapsulates real data output in specified $mode.

                                                                                        =cut

                                                                                        sub _to_console
                                                                                        {
                                                                                        my ($self, $msg, $mode) = @_;

                                                                                        my $name = '';

                                                                                        my $json_line = $json->encode($msg);
                                                                                        $self->{'code'} .= «console.$mode($json_line);»;

                                                                                        return $self;
                                                                                        }

                                                                                        Соответственно упростил end

                                                                                        =item B()

                                                                                        Finalyzes debugging and returns HTML that must be added to HTML page.

                                                                                        =cut

                                                                                        sub end
                                                                                        {
                                                                                        my $self = shift();
                                                                                        return SCRIPT_BEGIN. $self->{'code'}. SCRIPT_END;
                                                                                        }

                                                                                        Функция dump выкинута. Функция js_hash выкинута. Для PHP используйте json_encode или Services_JSON.

                                                                                        И спасибо.

                                                                                          0
                                                                                          На Zend Studio не смотрели?
                                                                                          Можно дебажить на тестовом сервере. В «родной» среде.
                                                                                            0
                                                                                            столько крику развели :)
                                                                                            а я например дампы в файл пишу, преимущество у него есть очевидное: не засоряем хтмл, можно создать много разных файлов со своими переменными в них (типа группировки в статье), можно дописывать и очищать перед записью
                                                                                              0
                                                                                              У каждого свои методы :) мне, к примеру, firePHP очень нравится — удобно.
                                                                                              HTML не засоряется (данные передаются через заголовки)
                                                                                            • НЛО прилетело и опубликовало эту надпись здесь

                                                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                              Самое читаемое