Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekierowanie komunikatow diagnostycznych
Forum PHP.pl > Forum > PHP
bartyk
Witam,


Powoli pewnie macie mnie już dość smile.gif

Chcę mieć możliwość wyświetlania komunikatów diagnostycznych (własnych) w osobnym okienku. Mówiąc inaczej odpalam skrypt w jednym okienku i w nim otrzymuje jakieś wyniki. Natomiast komunikaty związane z przebiegiem samego skryptu chcę mieć w drugim okienku.

Mam nadzieję, że rozumiecie o czym piszę winksmiley.jpg

Jak zwykle będę wdzięczny za pomoc
bela
zrob wlasny error handler i uzyj funkcji trigger_error

przeczytaj manuala zanim dasz kolejnego posta w tym temacie winksmiley.jpg
M4chu
Watpie, zeby w manualu znalazl to czego szuka (bo moim zdaniem nie szuka obslugi bledow a ich wyswietlania)

Smarty ma bardzo fajna obsluge debugowania - przy kazdym wywolaniu strony pojawia sie (lub jesli sie juz pojawilo, to sie odswieza) okienko a w nim rzadane dane.

Kod (skrocony smile.gif)
  1. <script language=javascript>
  2. if( self.name == '' ) {
  3. var title = 'Console';
  4. }
  5. else {
  6. var title = 'Console_' + self.name;
  7. }
  8. _smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes");
  9. _smarty_console.document.write("<HTML><HEAD><TITLE>Smarty Debug Console</TITLE></HEAD><BODY bgcolor=#ffffff>");
  10. _smarty_console.document.write("Smarty Debug Console");
  11. _smarty_console.document.write("</table>");
  12. _smarty_console.document.write("</BODY></HTML>");
  13. _smarty_console.document.close();
bela
@M4chu: sam ta zajrzyj a nie sie wymądrzasz tongue.gif wiem bo byłem i skorzystałem, obsluga i wyswietlanie sie wiąze ze sobą

  1. <?php
  2. class ErrorHandler {
  3. private $errors = array();
  4.  
  5. private $errorType = array(
  6. 1 => 'php Error',
  7. 2 => 'php Warning',
  8. 4 => 'Parsing Error',
  9. 8 => 'php Notice',
  10. 16  => 'Core Error',
  11. 32  => 'Core Warning',
  12. 64  => 'Compile Error',
  13. 128 => 'Compile Warning',
  14. 256 => 'User Error',
  15. 512 => 'User Warning',
  16. 1024 => 'User Notice',
  17. 2047 => 'E_ALL',
  18. 2048 => 'E_STRICT'
  19. );
  20.  
  21. public function __construct() {
  22. set_error_handler(array($this, 'handler'));
  23. }
  24.  
  25. public function handler($errno, $errstr, $errfile, $errline) {
  26. $errfile = basename($errfile);
  27. foreach($this->errorType as $key => $type) {
  28. if($errno == $key){
  29. $errno = $type;
  30. }
  31. }
  32. $this->errors[] = &#092;"<b>$errno</b> \" . $errfile . \"/\" . $errline . \": \" . $errstr . \"<br />n\";
  33. }
  34.  
  35. public function printErrors() {
  36. foreach($this->errors as $error) {
  37. print($error);
  38. }
  39. }
  40.  
  41. }
  42. ?>


masz tu przykladowy eh
M4chu
@bela: tak sie sklada, ze juz wczesniej zajrzalem i sposobu na otwarcie okienka tam nie znalazlem (a przynajmniej nie w obsludze bledow) tongue.gif
bela
a java script to od czego jest, co ?
M4chu
rotfl! nie wiem, moze i za wyraznie sie nie wyrazam, ale:
- (do 1 postu) nie wymadrzam sie tylko pisze to o co gosc pytal (czyt. okienko), bartyk nic nie pisal, ze nie wiem jak zrobic obsluge bledow, tylko nie wie jak zrobic to w oknie
- chyba nie myslales, ze na serio szukalem okienek w manualu php? lol.
- 'a java script to od czego jest' - patrz moj pierwszy post tongue.gif
bartyk
@bela: kwestia obsługi błedów nie jest dla mnie problem, tak jak napisał M4chu mój problem polega na przekierowaniu tych komunikatów do nowego okienka.

@M4chu: czyli muszę zainstalować smarty. Problem może się pojawić "u klienta" jeśli nie ma on smarty'ego sad.gif
yeti
A potrzebujesz mieć informacje wyświetlane w "czasie rzeczywistym" czy okienko otwierane po załadowaniu skryptu z kompletem informacji od debugera?
bartyk
@yeti: byłoby lepiej "w rzeczywistym" smile.gif
chociaż z drugiej strony ...

Tak przy okazji: czy jest jakiś sposób (oprócz "ręcznego" analizowania kodu) aby stwierdzić, czy jakaś zmienna jest w ogóle używana?
yeti
Po 17 skończę robotę i spróbuję wygrzebać mój stary kod do tego. Z grubsza działa to tak:
1. przechwytujesz błędy i zapisujesz do tablicy
2. w ustawionych miejscach wrzucasz do tablicy określone zmienne i ich wartości
3. w ustawionych miejscach wrzucasz do tablicy określone komunikaty debugera
(może to być jedna tablica albo dwie oddzielne)

na koniec pracy skryptu zapisujesz obie tablice do pliku (np. debug.htm) i wywołujesz window.open(debug.htm) z odpowiednimi parametrami.

Tak to wygląda w skrócie. Może są optymalniejsze i bardziej eleganckie metody, ale jak na moje potrzeby ta sprawdza się całkiem nieźle.
bartyk
będę baaaaardzo wdzięczny smile.gif
M4chu
@Bartyk: Oczywiscie, ze nie musisz, ten kod ktory podalem robi okienko, a to co w nim chcesz miec to juz Twoj problem smile.gif Ja kozystam z podobnego mechanizmu jak yeti:
mam klase debug, w niej metode write($wiadomosc, $plik, $linia), ktora wrzuca te dane do tablicy; w okreslonych miejscach skryptu wywyluje ta metode, aby pozniej w tym oknie wyswietlic nagromadzone dane.
yeti
Cytat(bartyk @ 2004-11-25 12:20:12)
będę baaaaardzo wdzięczny smile.gif

Oj, chyba nie będziesz sad.gif

Ponieważ zarzuciłem jakiś czas temu debugowanie w osobnym oknie (nie lubie popUpów i blokuję je starannie) i zapisuję informacje debugera jako komentarze HTMLa to nie pamiętam, gdzie siedzi stara klasa debugera. Ale na podstawie wcześniejszego przepisu nie ma problemu żeby to zrobić (zapis do tablicy, wygenerowannie pliku, otwarcie pliku w oknie). Jeśli nie będziesz mógł dać rady daj znać na priv. Skrobnę w sobotę i Ci podeślę.
bela
  1. <? /**
  2.  * function showDebug
  3.  * @english Make a Popup window with debug information
  4.  * @polish Tworzy okno popup 
  5.  * @todo wykonac osobny model dla debuggera
  6.  * @access public
  7.  * @return string
  8.  */
  9. public function showDebug() {
  10.  
  11. echo &#092;"<script type=\"text/javascript\">
  12. if( self.name == '' ) {
  13. var title = 'Console';
  14. } else {
  15.  var title = 'Console_' + self.name;
  16. }
  17. _debug_console = dbdebug = window.open('', 'debug', 'width=600, height=500, menubar=no, scrollbars=yes');
  18. _debug_console.document.write('<html><head><title>DbDebug Console</title></head><body>');&#092;";
  19. echo ' _debug_console.document.write('<div style=&#092;"paddind: 3px; margin: 3px; background: #ffffff; font-size: 12px; font-famil: Tahoma;\">'); ';
  20. foreach ($this->aDbDebug as $debug) {
  21. echo '_debug_console.document.write('<div style=&#092;"width: 100%;\">Query: '.str_replace(array(\"rn\", \"n\", \"r\", \"t\", \" \"), ' ',$this->highlight($debug['query'])).'<br />'); ';
  22. echo '_debug_console.document.write('<span style=&#092;"color: blue;\">In: '.addslashes($debug['file']).' at line: '.addslashes($debug['line']).'</span><br />'); ';
  23. echo '_debug_console.document.write('Time: '.$debug['time'].'<br/>'); ';
  24. echo '_debug_console.document.write('Error: <span style=&#092;"color: red\">'.addslashes($debug['error']).'</span></div><hr />'); ';
  25. }
  26. echo ' _debug_console.document.write('</div></body></html>'); ';
  27. echo '</script>';
  28. }?>


gdzies z otchłani wyciągnełem kawałek klasy Sh4dowa do obslugi DB
bartyk
Wielkie dzięki. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.