Zainstalowałem i skonfigurowałem dzisiaj najnowszą wersję serwera WAMP – 2.1e. O niektórych problemach związanych z jego działaniem pisałem już wcześniej, także temat ten jest Wam na pewno znany. W dzisiejszym wpisie chciałbym pokazać, w jaki sposób ukryć „pomarańczowe komunikaty” o błędach wykonania skryptu PHP, jakie serwuje nam debugger XDebug.
Wstęp.
Na początku należą się Wam przeprosiny za moje zapominalstwo. Obiecałem, że w piątek będą pojawiały się wpisy, aczkolwiek byłem dzisiaj tak pochłonięty działaniami na komputerze, że nawet nie zauważyłem, kiedy na zegarze wybiła druga nad ranem. Niniejszym sypię sobie popiół na głowę i obiecuję więcej tego błędu nie popełniać. W każdym razie wniosek jest taki, że blog żyje, a więc mogę spokojnie przejść do tematu. ;]
WAMPServer 2.1e, bo tak brzmi pełna nazwa tego pakietu, to jeden z najwygodniejszych i najpopularniejszych gotowych stosów WAMP w środowisku Windowsa. Zawiera on w sobie:
- Apache 2.2.17
- PHP 5.3.5
- MySQL 5.5.8
- PhpMyAdmin 3.2.0.1
- XDebug 2.1.0-5.3
Widać wyraźnie, że ten zestaw oprogramowania to absolutnie najnowsze, aczkolwiek stabilne wersje poszczególnych komponentów. Można by go w pewnym sensie nazwać „bleeding edge”, aczkolwiek ta nazwa odnosi się raczej do wersji niestabilnych, kompilowanych bezpośrednio z drzewa /trunk.
Z listy można także wyciągnąć wniosek, że oprócz standardowych komponentów Apache, PHP, MySQL i narzędzia PhpMyAdmin, w zestawieniu znalazł się także debugger XDebug. To właśnie on powoduje pojawianie się tych „pomarańczowych komunikatów” – tabelek, zawierających cały stos wywołań odpowiadający miejscu wystąpienia błędu. Oczywiście są one przydatne, ale czasem wolelibyśmy zobaczyć jednak zawartość strony internetowej, zamiast ciągnących się boksów, szczególnie, że nie zawsze pasują do layoutu strony.
Jak więc zatem je wyłączyć?
Rozwiązanie: edycja pliku php.ini.
Aby wyłączyć komunikaty narzędzia XDebug, będziemy musieli wprowadzić dwie zmiany do pliku php.ini:
- Włączyć plik logu błędów PHP,
- Wyłączyć rozszerzenie XDebug.
W pierwszym przypadku musimy odszukać w konfiguracji następującą linijkę:
;error_log = "%PATH%/logs/php_error.log"
gdzie fragment %PATH% oznacza ścieżkę do naszej instalacji pakietu. Usuwamy średnik z początku linii i możemy przejść do puntu drugiego. Tym razem odszukujemy następującą linijkę:
zend_extension = "%PATH%/bin/php/php5.3.5/zend_ext/php_xdebug-2.1.0-5.3-vc6.dll"
- fragment %PATH% jest analogiczny do punktu pierwszego. Tutaj musimy dodać średnik na początku linii, aby zablokować rozszerzenie XDebug.
Po wykonaniu tych dwóch zmian zapisujemy plik php.ini i restartujemy cały pakiet wykorzystując menu kontekstowe ikonki w trayu. Wszystkie błędy wykonania zostaną grzecznie zapisane w logu błędów, a my możemy cieszyć się widokiem strony internetowej bez pomarańczowych kwadratów. ;]
Warto przeczytać.
Trwa ładowanie…
Wyłączyć xdebug tylko po to by usunąć komunikaty jest najgorszym z możliwych rozwiązań. Jeśli chcesz usunąć kolor i tagi html, wystarczy ustawić html_errors na Off (lub na 0).
jStat – biblioteka JavaScript do obliczeń statystycznych
Nie wiem dlaczego, ale w moim przypadku zabawa tymi ustawieniami nie dała zbyt wiele – niby wszystko było wyłączone, a na stronie nadal wyświetlały się pomarańczowe boksy. Aczkolwiek rozumiem, że pewnie nie mam tutaj racji i trafiłem na „zły dzień” WAMPa. Spróbuję jeszcze raz i zobaczę, czy mi się uda.
WAMP- Usuwanie komunikatów o błędach XDebug
Witam,
Podobnie jak batman uważam wyłączenie xdebuga w php.ini uważam za złe posunięcie i nigdy go nie stosuję w trakcie pisania kodu. Jeżeli koniecznie muszę zobaczyć jak działa aplikacja bez raportowania z xdebug to wyłączam go tymczasowo wykorzystując funkcję xdebug_disable() dodając przy tym komentarz „@todo po (…) usuń xdebug_disabled()”.
Generalnie xdebug dodaje kilka fajnych funkcji, które można znaleźć w ich dokumentacji http://www.xdebug.org/docs/all_functions .
Pozdrawiam
Rozumiem, faktycznie nie jest to najlepsze posunięcie (używając w miarę lekkich stwierdzeń ;]), dziękuję za wypunktowanie. Mam nadzieję, że rozwiązania podane przez Ciebie i @batmana przyczynią się do szerzenia lepszych praktyk niż ta przeze mnie opisana.
WAMP- Usuwanie komunikatów o błędach XDebug
„Oczywiście są one przydatne, ale czasem wolelibyśmy zobaczyć jednak zawartość strony internetowej, zamiast ciągnących się boksów, szczególnie, że nie zawsze pasują do layoutu strony.”
Jak więc zatem je wyłączyć?”
Nie wyłączać, tylko sprawić, aby Tych błędów nie było. Nawet jeśli to noticy :)
ZFQT1- View Helper wiele metod
Oczywiście, to jest najlepsze rozwiązanie, aczkolwiek nie zawsze możliwe. W aplikacji, nad którą pracuję, nie cały kod jest mojego autorstwa i poprawiając jakieś wywołanie w jednym miejscu nie mam pewności, że w innym się coś nie zepsuje. Niestety jest to utrzymanie serwisu, który żyje od kilku lat, także muszę być bardzo ostrożny w zmianach. Mój problem polegał na tym, że do własnych celów używam *czasem* handlera opartego o set_error_handler() i myślałem, że to załatwi sprawę [ignorowanie części błędów], ale niestety boksy XDebuga pojawiały się nadal.
WAMP- Usuwanie komunikatów o błędach XDebug
Dzięki wszystko śmiga pięknie, na początku miałam problem ze znalezieniem ścieżki bo wklejałam wszystko ze skrótem „%PATH%.
Dzięki świetny TUTEK.
Dziękuję i zapraszam po więcej! ;]
Windows, PHP, Cygwin, bash: Wykonywanie poleceń w konsoli.
Mi to nie działa nadal są boxy.. próbowałem również nie wyłączać xdebuga, a zamiast tego ustawic html errors na off, nadal się wyświetlają..
Jeśli ustawiłeś html_errors na off, to raczej już nic nie powinno się pokazywać. Jeśli jesteś jeszcze zainteresowany tym tematem, podeślij odpowiednie informacje (ustawienia, logi, fragmenty kodu) na maila.
CodeRetreat 2011: Na miejsca, gotów…