Pod maską: serwer webowy, PHP i baza danych
Moduł 1: Jak działa WordPress · Czas czytania: 8 minut
Cel lekcji: Po tej lekcji będą Państwo potrafili krok po kroku wyjaśnić, jak żądanie strony trafia do WordPressa i staje się stroną HTML, oraz gdzie cache skraca tę drogę.
Kluczowe pojęcia: serwer webowy (LiteSpeed, Apache, nginx), PHP, MariaDB/MySQL, zapytanie (query), index.php, hierarchia szablonów, dynamiczna vs statyczna, TTFB
Strona statyczna a strona dynamiczna
Na stronie statycznej każda podstrona istnieje jako gotowy plik na serwerze. Serwer webowy pobiera ten plik i wysyła go dalej. To szybkie i proste rozwiązanie, ale każda zmiana oznacza nowy plik.
WordPress działa dynamicznie: strona powstaje dopiero w momencie, gdy ktoś jej zażąda. Nie istnieje plik contact.html. Istnieje fragment tekstu w bazie danych, motyw z szablonami oraz zestaw kodu PHP, który łączy te dwa elementy. Daje to wygodę (tekst można zmienić w przeglądarce), ale kosztuje to obliczenia przy każdej wizycie. Zrozumienie tych obliczeń pomoże Państwu później zrozumieć, dlaczego strona działa wolno, dlaczego cache tak bardzo poprawia wydajność i dlaczego aktualizacja PHP może coś popsuć.
Droga żądania strony
Załóżmy, że odwiedzający otwiera https://example.com/contact/. Oto, co się wtedy dzieje:
- DNS: przeglądarka wyszukuje adres IP domeny
example.com(patrz kurs DNS). Nawiązuje bezpieczne połączenie z tym adresem. - Serwer webowy: na serwerze działa serwer webowy, na przykład LiteSpeed, Apache lub nginx. Odbiera on żądanie. Jeśli istnieje rzeczywisty plik lub katalog o tej nazwie (obraz, arkusz stylów), zostaje on wysłany od razu. Jeśli nie, obowiązuje reguła z pliku
.htaccess(w przypadku LiteSpeed i Apache) lub z konfiguracji nginx: „przekaż wszystko, co nie istnieje, doindex.php”. - PHP:
index.phpjest plikiem PHP. Serwer webowy zleca jego wykonanie PHP, czyli językowi programowania, w którym napisany jest WordPress. PHP ładuje najpierw plikwp-config.php(ustawienia, w tym dane dostępowe do bazy danych), potem resztę WordPressa, a następnie wszystkie aktywne wtyczki i aktywny motyw. - Baza danych: WordPress sprawdza, jaka treść odpowiada adresowi
/contact/, i zadaje pytania bazie danych (MariaDB lub MySQL): która strona ma slugcontact, jakie są ustawienia witryny, jakie menu jej odpowiada? Takie pytanie nazywa się zapytaniem (query). Prosta strona generuje szybko kilkadziesiąt zapytań; z wtyczkami może to być nawet kilkaset. - Motyw: WordPress wybiera, który szablon motywu zostanie użyty do wyświetlenia strony. Odbywa się to zgodnie z hierarchią szablonów: dla strony ze slugiem
contactWordPress szuka najpierw szablonupage-contact, potempage-<id>(numer strony), następniepage, potemsingular, a na końcuindex. Wygrywa pierwszy szablon, który istnieje. - Zwrot HTML: rezultatem jest strona HTML, którą PHP przekazuje serwerowi webowemu, a serwer webowy przeglądarce.
- Przeglądarka odczytuje HTML, a następnie pobiera jeszcze arkusze stylów, skrypty, czcionki i obrazy. To zwykłe pliki, więc pochodzą bezpośrednio z serwera webowego (lub z cache).
Pomiędzy krokiem 2 a krokiem 6 mieści się czas, jakiego potrzebuje serwer do wygenerowania strony. Widać to jako TTFB (time to first byte): czas między żądaniem a pierwszym bajtem odpowiedzi. Przy dobrze skonfigurowanej witrynie wynosi on zdecydowanie poniżej jednej sekundy. W module 6 zmierzą to Państwo samodzielnie.
Dlaczego każda wtyczka ma znaczenie
W kroku 3 ładowane są wszystkie aktywne wtyczki, przy każdym żądaniu. Nawet jeśli dana wtyczka nic nie robi na danej stronie. Wtyczka do galerii zdjęć zostanie więc załadowana również wtedy, gdy ktoś otworzy stronę kontaktową. Każda wtyczka może wykonywać dodatkowe zapytania, ładować dodatkowy kod i dodawać dodatkowe skrypty do strony.
To wyjaśnia dwie rzeczy, z którymi Państwo się jeszcze spotkają w tym kursie:
- Mniej wtyczek to zwykle szybsza strona. Nie dlatego, że sama ich liczba ma znaczenie, lecz dlatego, że każda wtyczka może wykonywać pracę przy każdym żądaniu.
- Jedna uszkodzona wtyczka może zablokować całą witrynę. Jeśli w kroku 3 coś się nie powiedzie (na przykład wtyczka niedziałająca z nową wersją PHP), PHP nigdy nie dotrze do kroku 6. Odwiedzający zobaczy pustą, białą stronę lub komunikat „Wystąpił krytyczny błąd na tej witrynie” (lekcja 5.4).
Skąd biorą się PHP i baza danych
PHP i baza danych działają na serwerze Państwa dostawcy hostingu. Wersję PHP zazwyczaj wybierają Państwo sami w panelu kontrolnym (w DirectAdmin nosi to nazwę Select PHP version, patrz lekcja 8.4). Bazę danych tworzy się podczas instalacji; instalator często robi to automatycznie (lekcja 2.2).
Kilka rzeczy, o których warto pamiętać:
- Wersja PHP: każda nowa wersja PHP jest szybsza i bezpieczniejsza, ale stary kod może na niej przestać działać. wordpress.org zaleca obecnie PHP 8.3 lub nowszy (stan na listopad 2026).
- Baza danych: wordpress.org zaleca MariaDB 10.11 lub nowszy, albo MySQL 8.0 lub nowszy. MariaDB jest odgałęzieniem MySQL; dla WordPressa nie ma to znaczenia.
- Baza danych znajduje się zwykle na tym samym serwerze (wówczas
DB_HOSTma wartośćlocalhost). W większych rozwiązaniach hostingowych może znajdować się na osobnym serwerze.
Cache: skracanie drogi
Jeśli stu odwiedzających otworzy tę samą stronę kontaktową, WordPress bez cache tworzy ją sto razy od nowa. Za każdym razem te same zapytania, ten sam szablon, ten sam HTML. Cache stron zapisuje HTML po pierwszym wygenerowaniu. Kolejny odwiedzający otrzymuje zapisaną wersję: kroki od 3 do 6 odpadają.
Zonder cache: browser > webserver > PHP > WordPress + plugins > database > thema > HTML
Met cache: browser > webserver > opgeslagen HTMLDlatego właśnie cache daje największy wzrost szybkości (lekcja 6.2). Wyjaśnia to też częste nieporozumienie: „zmieniłem tekst, ale widzę starą wersję”. W takim przypadku widzą Państwo zapisaną wersję; po wyczyszczeniu cache zobaczą Państwo nową.
Nie wszystko może pochodzić z cache. Zalogowany administrator, koszyk zakupowy czy strona płatności wyglądają inaczej dla każdego odwiedzającego. Dobra wtyczka cache pomija takie przypadki.
Nagłówki: co mówi serwer
Każda odpowiedź serwera webowego zaczyna się od nagłówków (headers), przed treścią HTML. Nie widać ich na stronie, ale widać je w narzędziach deweloperskich przeglądarki (F12, zakładka Sieć, kliknięcie na pierwsze żądanie). Przykład:
HTTP/2 200
server: LiteSpeed
content-type: text/html; charset=UTF-8
link: <https://example.com/wp-json/>; rel="https://api.w.org/"
x-litespeed-cache: hitserverwskazuje, jaki serwer webowy odpowiada.linkzwp-jsonzdradza, że to WordPress.x-litespeed-cache: hitoznacza, że ta strona pochodzi z cache LiteSpeed. Inne systemy cache używają innych nazw, na przykładx-cache: HITlubcf-cache-status: HITw przypadku Cloudflare.
Nie muszą Państwo znać tych nagłówków na pamięć. Jednak kto potrafi je odczytać, może samodzielnie rozwiązać wiele problemów.
Podsumowanie
- WordPress tworzy każdą stronę w momencie żądania: serwer webowy, PHP, wtyczki, baza danych, motyw, HTML.
- Przy każdym żądaniu ładowane są wszystkie aktywne wtyczki; jedna uszkodzona wtyczka może zatrzymać całą witrynę.
- Hierarchia szablonów określa, który szablon motywu formatuje daną stronę.
- Cache stron pomija obliczenia, zwracając zapisany HTML. Zalogowani użytkownicy i koszyki zakupowe nie powinny znajdować się w takim cache.
- Nagłówki odpowiedzi mówią, jaki serwer webowy odpowiada i czy strona pochodziła z cache.
Quiz
Zadanie
Zadanie A1.2: Proszę odczytać nagłówki swojej strony. Proszę otworzyć własną witrynę (lub wordpress.org) za pomocą narzędzi deweloperskich przeglądarki (F12, zakładka Sieć, odświeżenie strony, kliknięcie na pierwsze żądanie). Proszę wpisać, jaki serwer webowy widnieje w nagłówku server (lub „brak”, jeśli go nie ma) oraz czy istnieje nagłówek wskazujący, że strona pochodziła z cache (jaka nazwa i jaka wartość). Program pobierze tę samą stronę i porówna wyniki.
Więcej informacji
Poniższe artykuły opisują te kroki w panelach WebOké; w innych panelach działają one w podobny sposób.
- Instrukcja DirectAdmin 1.9: Pojęcia wyjaśnione: domena, subdomena, wskaźnik, DNS, skrzynka e-Mail i baza danych
- Instrukcja DirectAdmin 14.1: Wybór wersji PHP (Select PHP version)
- Bezpłatny kurs DNS 1.4: Podróż zapytania DNS
- Hierarchia szablonów (developer.wordpress.org, w języku angielskim): https://developer.wordpress.org/themes/basics/template-hierarchy/
