Co to jest debugowanie w PHP?
Skąd pochodzi ta dziwna nazwa i o co tak naprawdę chodzi?
Debugging w PHP
Termin debugowanie jest dobrze znany wszystkim programistom – nie tylko miłośnikom PHP. Jest to powszechne określenie opisujące próby naprawienia źle działającego skryptu. Nie będę się tutaj rozwidził nad tym, dlaczego błąd w oprogramowaniu nazywamy bugiem (z ang. robakiem). Jeśli jednak ciekawi Cię etymologia tego określenia, sprawdź ten link.
Debugowanie to po prostu usuwanie błędów z oprogramowania. Kiedy piszesz kod, często okazuje się, że coś nie działa zgodnie z planem.
Warto wiedzieć, jak sobie z takimi problemami radzić. Czasami są to trywialne błędy, takie jak brak średnika na końcu polecenia lub literówka w nazwie metody. Im lepszy edytor do pisania kodu, tym szybciej wychwycimy te najprostsze i najbardziej oczywiste. Inteligentne środowiska do pisania kodu PHP (jak PHPStorm czy VS Code) same podkreślają błędy w pisowni i wyłapują niepoprawną składnię. Korzystanie z nich może Ci zaoszczędzić masę czasu i nerwów.
Gorzej, jeśli kod wygląda na poprawny, a zamiast oczekiwanego efektu na ekranie pojawia się pusta strona.
W zależności od konfiguracji środowiska, interpreter może wypisać wszystkie błędy i ostrzeżenia na ekranie lub ukryć je przed nami. Podczas pracy ze skryptami PHP, szczególnie na środowisku produkcyjnym, nie chcemy pokazywać użytkownikowi szczegółowych błędów. Jest to często traktowane jako luka w bezpieczeństwie, bo może odsłonić nasze środowisko i narazić aplikację na atak.
Dlaczego błędy należy ukrywać
Przede wszystkim chodzi o ujawnienie poufnych informacji o serwerze.
Często w błędach pojawiają się ścieżki dostępu do plików i ich nazwy. Czasami nawet możesz zobaczyć szczegółową rozpiskę narzędzi, na których działa aplikacja.
Informacje te są bardzo cenne dla atakującego, ponieważ każda technologia ma swoje mocne i słabe strony. Łatwiej jest złamać zabezpieczenia, jeśli znasz konkretną wersję PHP, serwer (Apache lub NGINX) oraz system operacyjny, na którym to wszystko działa.
Po drugie, nie chcemy wystraszyć zwykłego gościa naszej witryny.
Takie rzeczy, jak stosy i dzienniki wywołań, wyglądają przerażająco i podejrzanie. Osoba bez wiedzy technicznej ucieknie i już pewnie nie wróci do Twojej aplikacji.
Dlatego, gdy publikujemy aplikację na serwerze publicznym, należy wyłączyć informacje o błędach. Wtedy mamy do czynienia ze środowiskiem produkcyjnym.
Jednak kiedy tworzymy aplikację i pracujemy nad nią, dobrze jest móc sprawdzać, jak działa kod. Musimy śledzić każdy błąd i zdobyć jak najwięcej informacji, aby go naprawić. Nazywa się to środowiskiem programistycznym (powszechnie: developerskim).
Najczęściej mamy do czynienia z oczywistymi, powtarzalnymi błędami. Otrzymujemy pusty ekran lub pojawiają się piękne wyjątki PHP, zamiast spodziewanego formularza do logowania. Takie błędy są stosunkowo łatwe do znalezienia i naprawienia, ponieważ zdarzają się podczas regularnego używania aplikacji.
Niektóre problemy są bardziej wyrafinowane i trudniejsze do znalezienia.
Wtedy z pomocą przychodzi możliwość podglądu wartości, która znajduje się w danej zmiennej.
Var_dump i wartość zmiennej
Powiedzmy, że wykonujemy wiele operacji obliczeniowych na zmiennej, która z jakiegoś powodu osiąga inną wartość niż oczekiwana. Spodziewasz się, że po dodaniu 3 + 3, wynik wyświetli się 6. A ekran prezentuje ładną 9.
Wtedy sprawdzsz kod i widzisz, że wstawiłeś znak mnożenia zamiast plusa.
Co jednak, gdy takich operacji jest sporo? Jak najłatwiej znaleźć miejsce błędu?
Z pomocą przychodzi polecenie var_dump (sprawdź w oficjalnej dokumentacji).
Ci z Was, którzy spędzili już trochę czasu na programowaniu w PHP, z pewnością dobrze znają to polecenie.
Dla tych z Was, którzy widzą je po raz pierwszy, radzę je dobrze zapamiętać. Prawdopodobnie będziesz go często używać.
Var_dump dosłownie „zrzuca zmienną na ekran” wraz ze wszystkimi jej parametrami (typ, długość itp.). Jeśli jest to tablica, zwróci również wartości wszystkich elementów tej tablicy. Jeśli jest to obiekt, zwróci wartości pól i ich modyfikatory dostępu. Naprawdę przydatne narzędzie, jeśli chcesz wiedzieć, co dokładnie jest przechowywane w jednej z twoich zmiennych (i dlaczego, do diaska, jest to coś innego niż chciałem!).
Czasami próbujesz wyświetlić zmienną, która nigdy nie została zainicjowana (w PHP jest to łatwe, ponieważ interpreter sam utworzy dla nas tę zmienną ad hoc). Czasem warto sprawdzić, czy zmienna faktycznie ma wartość i to problem z wyświetlaniem, a może przy przypisywaniu wartości coś poszło nie tak.
Oto przykład tego, co się stanie, gdy pomnożymy liczbę przez następujący ciąg (odpowiedź nie jest oczywista nawet dla doświadczonych programistów):
<?php $a = "2ab23c"; $b = 12; $c = $a * $b; var_dump($c); ?>
Z niewielką pomocą polecenia var_dump możesz to szybko sprawdzić.
A może już to wiesz? Wtedy przyjmij moje uznanie i koniecznie zostaw komentarz pod wpisem.
Podsumowując temat debugowania
Debugowanie to ciągły proces, dzięki któremu skrypt działa zgodnie z założeniami.
Zaczyna się od pierwszej linii kodu i nigdy się nie kończy.
Od małych literówek w tekstach i adresach URL, po duże awarie i przypadkowe wyczyszczenia danych z bazy. Warto znać takie narzędzia jak var_dump i szeroko z nich korzystać.
Na koniec pamiętaj, aby usunąć wszystkie swoje wywołania var_dump z kodu produkcyjnego!
Powodzenia!
Spis lekcji w rozdziale pierwszym
Poprzednia lekcja: Komentarze | Następna lekcja: Podsumowanie działu |