PHP Console

Sporo wody upłynęło w Polskich rzekach od momentu kiedy ostatni raz aktualizowałem tego bloga. Nie znaczy to oczywiście, że porzuciłem pisanie. Na dowód tego chciałbym przedstawić pewne narzędzie, na które natknąłem się kilka dni temu. Mowa rzecz jasna o tytułowym PHP Console. 

Co to takiego?

Wbrew pozorom nie jest to biblioteka związana w jakikolwiek sposób z CLI. Nazwa tego dodatku do Google Chrome wzięła się stąd, że jedną z jego właściwości jest to iż potrafi wyświetlać błędy PHP i inne ciekawe informacje z nim związane w konsoli w/w przeglądarki. Jeśli ta idea Wam się spodobała możecie ów dodatek pobrać stąd.

Chwila, chwila, chwila… ale jak to ten plugin to czyni? Magia jakaś? Otóż programowanie to nie magia i aby dodatek ten mógł w ogóle zadziałać do projektu w pracy, nad którym chcemy się nim wspomóc musimy uruchomić bibliotekę php-console (do pobrania stąd), która to podpowiada przeglądarce jakie informacje ma wyświetlać.

Najlepiej jednak całość zobrazują konkretne przykłady.

var_dump won!

Korzystacie z var_dump’a? Oczywiście, że korzystacie! Jedną z podstawowych funkcji PHP Console jest właśnie wyświetlanie informacji o zmiennych. Czyni on to na dwa sposoby – pierwszy najbardziej rzucający się w oczy to wyświetlanie w prawym górnym rogu przeglądarki powiadomień, a drugi to wyświetlanie ich w konsoli przeglądarki.

Aby na własne oczy można było ujrzeć to o czym piszę wystarczy stworzyć plik php zawierający poniższy kod:

Druga linia kodu rejestruje klasę PC dzięki której będziemy mieli dostęp do statycznej metody debug. Metodę tę możemy stosować w zasadzie jako zastępstwo dla var_dump’a. Gdy podamy jako parametr jakąś zmienną to Chrome wyświetli nam ją w powiadomieniu po prawej stronie a w konsoli pojawi się struktura zmiennej, którą można przeglądać podobnie jak obiekty w JS po wyświetleniu ich za pomocą console.log. Poniższy kod:

Daje następujący efekt:

php console

Prawda, że ładnie? Oczywiście – jeśli kogoś denerwują powiadomienia przeglądarki można je wyłączyć. W przeciwieństwie jednak do var_dump’a funkcja debug przyjmuje tylko jeden argument i nie można podać ich całej listy tak jak to ma miejsce w standardowej funkcji.

Żaden błąd się nie ukryje

Jedną z bardzo przydatnych cech PHP Console jest to że potrafi wyświetlić informacje o błędach nawet jeśli w konfiguracji wyłączymy ich wyświetlanie 😉 Jak sprawić aby dodatek zaczął wyświetlać nam także błędy? Otóż wystarczy zmienić sposób w jaki inicjalizujemy bibliotekę php-console. Przykład poniżej:

Zasadniczo aby można było zobaczyć informacje o błędzie wystarczyłby kod zawarty w czwartej i piątej linii. Kod w szóstej linii powoduje, że informacje o ścieżce do pliku, w którym wystąpił błąd są znacznie krótsze. Efekt końcowy można zobaczyć poniżej:

php console

W podobny sposób dodatek poinformuje nas o tym, że wystąpił w naszej aplikacji wyjątek. Różnica polega na tym, że funkcję informującą o tym musimy „ręcznie” wywołać. Przykład poniżej:

php console

PHP Console potrafi wyświetli nam także informacje o błędach w JS 😉 W przypadku wystąpienia takowego zostaniemy uraczeni ładnym komunikatem z wykrzyknikiem na różowym tle. Jest to jednak jedyna funkcjonalność w zakresie JS jaką udostępnia PHP Console.

Warto wspomnieć jeszcze o pewnej ciekawej właściwości PHP Console. Jeśli przed przekierowaniem (header(‘Location: …’)) pojawi się błąd lub będziemy chcieli wyświetlić informacje o zmiennej to biblioteka nie pozwoli na przekierowanie tylko wyświetli odpowiednie informacje. Przykład poniżej

Bezpieczeństwo

Wszystko fajnie, ale co w wypadku gdy jakiś intruz będzie chciał za pomocą tego dodatku debugować naszą aplikację? Otóż możemy zabezpieczyć się hasłem. Przykład poniżej:

Po ustawieniu takiego hasła w pasku adresu pojawi się klucz i dopiero po jego kliknięciu i podaniu prawidłowego hasła będziemy mogli zobaczyć informację wyświetlane przez dodatek.

php console

Jeśli mówimy o bezpieczeństwie to warto wiedzieć jeszcze o istnieniu funkcji enableSslOnlyMode(), która automatycznie przekierowuje połączenie PHP Console na https. Inną ciekawą możliwością jest ograniczenie puli adresów IP z jakich można przeprowadzić proces debugowania. Odpowiada za to funkcja setAllowedIpMasks(). Przykład użycia tej ostatniej znajduje się poniżej.

Eval

W oficjalnej dokumentacji PHP na stronie opisującej operator goto jest taka śmieszna historyjka obrazkowa o tym, co czeka programistów którzy użyją w/w operatora 😉 Jestem zdania, że przy opisie funkcji eval powinno być coś podobnego 😉 Nie bez powodu też feature wykorzystujący w PHP Console tą właśnie funkcję jest dostępny dopiero po zabezpieczeniu dostępu hasłem tak jak to pokazałem wcześniej.

Gdy zostaną dopełnione wszystkie formalności związane z zabezpieczeniem, można dać możliwość uruchomienia terminalu, w którym będziemy mogli wpisywać kod, który następnie zostanie zdalnie wykonany. Można to zrobić w następujący sposób:

php console

Warto jednak zablokować wcześniej możliwość dołączania plików z zewnątrz poprzez konsolę używając funkcji disableFileAccessByOpenBaseDir() lub chociaż ograniczyć jej działanie poprzez funkcję setOpenBaseDirs(). Przyjmuje ona jako argument tablicę z listą ścieżek, z których mogą być dołączane pliki. Kod po tych zabiegach będzie wyglądał następująco:

Warto wspomnieć jeszcze o dwóch funkcjach, które z pewnością mogą okazać się przydatne w opisywanym przypadku.

Pierwsza to addSharedVar. Umożliwia ona zdefiniowanie zmiennej, z której będzie można korzystać w terminalu (pierwszy argument to nazwa zmiennej bez dolara, a drugi jego wartość). Przykład poniżej:

php console

Druga funkcja to addCodeHandler(), która jako argument przyjmuje funkcję anonimową. Ta będzie z kolei wykonywana przed wykonaniem kodu wprowadzonego do terminala. Możemy w ten sposób zmodyfikować lub walidować wprowadzony kod.

Co jeszcze należy wiedzieć o PHP Console?

Niby jest to oczywiste co teraz napiszę – php-console spowalnia w jakimś stopniu naszą aplikację.  Stopień spowolnienia zależy od samej aplikacji. Przykładowo na WordPressie w wersji 3.92 spadek ten był praktycznie niezauważalny, ale już na Vtiger CRM (jest to opensourcowy CRM – więcej na jego temat można dowiedzieć się tutaj i tutaj) spadek wydajności był bardzo duży. Przyczyny spowolnienia działania aplikacji mogą być różne np. ładowanie bardzo dużych obiektów. Każdy przypadek należy rozpatrywać indywidualnie.

To wszystko?

W zasadzie tak. Chociaż można by było jeszcze napisać kilka słów o optymalizacji wywoływania php-console i kliku innych rzeczach, ale ten post miał zadanie zaprezentować wam pewne narzędzie a nie rozkładać je na czynniki pierwsze. Mi się ono spodobało i z pewnością ułatwi mi debugowanie aplikacji. Mam nadzieję, że Wam także przypadnie do gustu.

Post Scriptum

Jak zapewne wiecie 28 sierpnia ukazała się stabilna wersja PHP 5.6. Z tego też powodu postanowiłem zabrać się za aktualizację ebooka i zawrzeć w nim wszystkie istotne wiadomości o najnowszej wersji PHP. Jeśli czas pozwoli chciałbym także przeprowadzić „refaktoryzację” części poświęconej PHP 5.5 oraz dodać rozdział niespodziankę 😉 Także szykuje się na dużą porcję nowych materiałów 😉

Posty które mogą Cię zainteresować:

Dodaj komentarz

Your email address will not be published. Please enter your name, email and a comment.