Dla kogoś, kto nigdy nie miał styczności z językiem PHP, rozpoczęcie jego nauki może być dość kłopotliwe. O ile sam język jest dość prosty i ma niską barierę wejścia, to problemem jest, że w Internecie można znaleźć masę poradników, które są już od dawna nieaktualne (od czasów PHP 5 wiele się zmieniło).
Dodatkowych nieścisłości dodaje fakt, że większość tutoriali każe zainstalować paczki zawierające PHP, Apache i MySQL bez żadnych wyjaśnień o co tak na prawdę z nimi chodzi. Postaram się zatem wyjaśnić od podstaw jak to wszystko działa oraz pomóc zacząć przygodę z PHP.

Dlaczego PHP?

Jeśli czytasz ten wpis to prawdopodobnie nie muszę Cię przekonywać do akurat tego języka. Nie ma co ukrywać, że w dzisiejszych czasach PHP traktuje się mniej poważnie niż języki takie jak np. Java, a w środowiskach uniwersyteckich jest wręcz pomijany. Ta zła sława, spowodowana jest głównie starymi wersjami PHP, gdzie ciężko było utrzymać kod w ładzie. Niska bariera wejścia okazała się mieczem obosiecznym, bo łatwy start powodował, że nowi programiści nie musieli przejmować się jakością kodu, a strony które tworzyli były dziurawe jak ser szwajcarski. Dodatkowo jeśli chodzi o zarobki, to nie trudno znaleźć informacje, że programista PHP to najgorzej opłacany programista wśród wszystkich języków.



Zniechęciłem Cię? Jeśli nie, to dobrze, bo teraz czas na zalety!

  • PHP daje ci dowolność w doborze narzędzi – to tak na prawdę był główny powód, który mnie przekonał do tego języka. W odróżnieniu od C#, nie byłem ograniczony ani do IDE (Visual Studio) ani do systemu operacyjnego (Windows). Podobało mi się, że teoretycznie do pisania w PHP starczyłby mi Notatnik. Na samym początku korzystałem z edytora Sublime Text, bo możliwości PhpStorma mnie przytłaczały. Oczywiście dziś nie wyobrażam sobie pracy bez PhpStorma, ale chodzi mi tutaj o tę możliwość wyboru narzędzia, z którym czujesz się komfortowo.
  • Rewelacyjna społeczność – mam wrażenie że jak ktoś programuje w PHP, to dlatego, że pokochał ten język. Dzięki temu na GitHubie można znaleźć całą masę dobrej jakości projektów i bibliotek, które zostały stworzone przez indywidualnych developerów. W odróżnieniu od JavaScript, programiści PHP dość rygorystycznie podchodzą do jakości kodu i tym samym kod jest poprawiany przez setki niezależnych programistów już na poziomie code review. Wiadomo, że można też znaleźć wiele bubli, ale generalnie tendencja jest taka, że PHP-owcom zawsze zależy, by ich kodzik był super i dążą do pełnego pokrycia w testach. Dodam jeszcze, że wszelkie standardy kodowania w PHP (PHP-FIG) powstały oddolnie przez społeczność i są akceptowane niemal we wszystkich projektach na świecie. Są jednak wyjątki od tej reguły, jak np. WordPress.
  • Elastyczność – PHP zostało stworzone z myślą o tworzeniu stron internetowych. Pierwotne rozwinięcie skrótu PHP to Personal Home Page (Osobista Strona Domowa). Prawda taka, że obecnie język PHP można używać do przeróżnych celów, nawet do tak szalonych zastosowań jak implementacja OpenGL w PHP. To akurat skrajność, ale bardziej chodzi mi o to, że nie jesteśmy zmuszeni do korzystania ze ściśle wyznaczonych ścieżek. Przykładowo: do tworzenia strony możemy użyć jednego z parudziesięciu frameworków ale równie dobrze możemy nie użyć go wcale.
  • Duża popularność – mimo że PHP nie jest dzisiaj trendy, to wciąż jest używany przez 78.7% wszystkich stron internetowych! Taka popularność powoduje, że zapotrzebowanie na programistów PHP wciąż jest duże, a tym samym można znaleźć dużo ofert. Często też nie ma problemu ze znalezieniem zdalnej oferty pracy, jako że PHP nie jest za bardzo językiem używanym w korporacjach, które czasem narzucają standardy bezpieczeństwa uniemożliwiające pracę zdalną.
  • Dojrzałość języka – mówiąc krótko, jeśli masz z czymś jakiś problem, to prawdopodobnie ktoś już go wcześniej rozwiązał. Oznacza to, że zazwyczaj Google pomoże nam w większości problemów związanych z samym językiem.

Jak działa PHP?

Weźmy jako przykład najprostszy kod w PHP, jaki tylko można napisać:
<?php

echo 'Hello World';


Celem powyższego kodu jest wyświetlenie tekstu „Hello World”. Jeśli zapiszemy ten fragment do pliku, to nasz system prawdopodobnie nie będzie wiedział co z takim plikiem o rozszerzeniu PHP zrobić. A my przecież chcemy uruchomić nasz program, prawda?



Niestety, do wykonania naszego kodu potrzebny jest interpreter. Zapytacie: Czym jest interpreter? W dużym skrócie, interpreter to program, który odczytuje Wasz kod źródłowy (kod który rozumiemy my, jako ludzie) i konwertuje go na kod zrozumiały dla Waszego komputera. Być może brzmi to zawile, ale w praktyce jest to kwestia uruchomienia jednego polecenia w linii komend:



Po wpisaniu php hello.php wykonał się nasz skrypt, którego zadaniem było wyświetlenie napisu „Hello World”. „%” na końcu linii to jedynie informacja pomocnicza z terminala, że wyświetlany tekst nie kończy się nową linią.

Serwer HTTP

Powyższy przykład pokazał nam jak uruchomić nasz skrypt w PHP przed terminal/wiersz poleceń. Taki sposób daje nam już pełne możliwości języka PHP i w teorii możemy napisać dowolną aplikacje jaką chcemy. Jednak, jeśli chcemy użyć PHP do stworzenia strony internetowej (a taki jest przecież nasz cel 😄), potrzebujemy dodatkowo serwera HTTP.

Serwer HTTP działa jako proces „w tle”, który czeka na połączenia. Załóżmy że mamy stronę programistadlapasji.pl . Jeśli wejdziemy pod ten adres przez przeglądarkę, to przeglądarka wysyła żądanie (ang. request) do serwera HTTP o treści typu „podaj mi zawartość strony programistadlapasji.pl”.
Sam serwer HTTP nie wie co jest zawartością tej strony, ale wie że odpowiedź (ang. response) dostanie z naszej aplikacji w PHP. Dlatego serwer HTTP komunikuje się z PHP na zasadzie „mam tu taki request, co mam odpowiedzieć?”. Wtedy nasza aplikacja wysyła odpowiedź z powrotem do serwera HTTP, a serwer HTTP wysyła ją do przeglądarki osoby, która weszła na naszą stronę.
Najczęściej używanymi serwerami HTTP dla PHP są: Apache i nginx.



Jako ciekawostkę dodam, że serwer HTTP nie musi istnieć jako osobna aplikacja. Może być on częścią naszej aplikacji napisanej w całości w PHP, tak samo jak działa to w node.js. Są do tego gotowe biblioteki. Jednak nie spotkałem się jeszcze nigdy z komercyjnym wykorzystaniem takiego serwera HTTP napisanego w PHP, więc śmiało można uznać, że to rzadkość.

Wbudowany serwer HTTP

Warto też wiedzieć, że sam PHP posiada w sobie wbudowany web server. Z jego użyciem możemy bardzo łatwo „wystawić” serwer HTTP dla naszej aplikacji. Weźmy jako przykład aplikację „hello.php”, którą uruchomiłem w terminalu dwa akapity wyżej.
Starczy, że wejdziemy do folderu z naszą aplikacją i wpiszemy:
php -S localhost:8000

Powinniśmy zobaczyć w terminalu tekst:
[Thu Oct 21 15:03:30 2021] PHP 7.4.22 Development Server (http://localhost:8000) started

Oznacza to, że nasz serwer pomyślnie wystartował pod portem 8000. Możemy wejść w naszej przeglądarce internetowej pod adres http://localhost:8000/hello.php i zobaczymy naszą aplikację.

Serwer bazy danych

Gdy pracujemy przy stronach internetowych, w większości przypadków będzie potrzebna nam baza danych. Załóżmy, że nasza strona zawiera sekcje komentarzy. Każdy, kto wejdzie na stronę, będzie mógł zostawić komentarz, który będzie widoczny dla wszystkich. Jako, że PHP nie potrafi samo z siebie przechowywać długoterminowych danych, potrzebna jest nam właśnie baza danych. Bazę danych najprościej będzie nam wyobrazić sobie jako arkusz kalkulacyjny w Excelu. Nasza tabela (odpowiednik excelowskiego arkuszu) wyglądałaby mniej więcej tak:



Tutaj zaznaczę, że dostęp do bazy danych odbywa się jedynie za pośrednictwem naszej aplikacji w PHP. To my, jako programiści, wybieramy które dane z bazy danych chcemy wyświetlić użytkownikowi oraz to my decydujemy, jak i w jaki sposób dane mają być zapisane.

Najczęściej używana baza danych w PHP to MySQL, ale nie jest to żadna reguła, bo PHP obsługuje wszystkie najpopularniejsze typy baz danych i wybór bazy często dobierany jest pod dany projekt.

Komunikacja PHP z bazą danych wygląda podobnie jak komunikacja serwera HTTP z PHP. Jeśli aplikacja chce dostać wszystkie dane odnośnie komentarzy, to wysyła do bazy danych zapytanie (ang. query), które wygląda mniej więcej „POKAŻ MI WSZYSTKIE DANE Z TABELI KOMENTARZE!”. I to dosłownie tak wygląda, bo takie zapytanie zapiszemy:
SELECT * FROM comments;.
Jest to tzw. język SQL. W odpowiedzi zwrotnej, baza danych prześle dane do naszej aplikacji, a w aplikacji sami musimy zdecydować co dalej z tymi danymi zrobić. O samym języku SQL wspomnę jeszcze w późniejszych wpisach, także na tę chwilę nie przejmujcie się, jeśli brzmi to jak „czarna magia”.

Podsumowanie

Zatem mamy dwa sposoby uruchamiania aplikacji w PHP:
1) Przez terminal (php-cli)
2) Przez serwer HTTP (php-fpm)

Aplikacje uruchamiane przez terminal, to mogą być proste skrypty, które uruchamiamy manualnie.
Aplikacje uruchamiane przez serwer HTTP to będą strony internetowe.

Do działania strony internetowej potrzebujemy:
– serwer HTTP
– PHP
– bazy danych



Jest to niemal klasyka, którą instaluje każdy programista PHP na swoim serwerze, dlatego taki zestaw zyskał nawet swoją nazwę: LAMP (Linux, Apache, MySQL, PHP) lub LEMP (Linux, Nginx, MySQL, PHP). Dla świeżych programistów istnieją również gotowe paczki na Windowsa, które instaluje się klikając „next-next-next”. Dlatego praktyka jest dużo łatwiejsza niż teoria. Jednak moim zdaniem, na każdym etapie nauki programowania, powinniśmy rozumieć co robimy. Dlatego uważam, że elementy wspomniane w tym wpisie, to są fundamenty, które powinniście znać.

Tymczasem zostawiam Was właśnie z tą teorią. A już niebawem zrobię wpisy, jak możecie przygotować środowisko programistyczne dla PHP na Waszych komputerach.

Related Posts