Strona nie działa po zmianie PHP – przyczyny i plan naprawy
- Typowe objawy
- Błąd krytyczny lub biały ekran zaraz po zmianie PHP przez hosting lub przez Ciebie
- Najczęstsza przyczyna
- Stara wtyczka, motyw lub własny kod używający funkcji usuniętych w PHP 8
- Czas naprawy
- Powrót do starszego PHP: minuty. Dostosowanie strony: od godziny do kilku dni
- Czy zrobisz to sam?
- Powrót i diagnozę tak. Poprawki w kodzie raczej z programistą
Szybka odpowiedź
Gdy strona nie działa po zmianie PHP, prawie zawsze winna jest wtyczka, motyw lub własny kod, który używa funkcji usuniętych w PHP 8, na przykład create_function() albo each(), lub łamie zaostrzone w PHP 8 zasady typów. Na szybko przywróć poprzednią wersję PHP w panelu hostingu, jeśli jest jeszcze dostępna. Potem włącz WP_DEBUG_LOG, odczytaj z logu winny dodatek, zaktualizuj go albo wymień i przejdź na PHP 8.3 lub nowsze, które zaleca WordPress.
Ta awaria ma charakterystyczny przebieg. Strona działała latami, nikt nic nie zmieniał, a jednego dnia pokazuje błąd krytyczny. Po kilku telefonach okazuje się, że hosting przełączył konta na nowszą wersję PHP, o czym uprzedzał mailem kilka tygodni wcześniej. Albo właściciel sam zmienił wersję, bo panel WordPressa wyświetlał ostrzeżenie o przestarzałym PHP.
W obu przypadkach strona nie jest zepsuta na zawsze. Jej kod po prostu nie pasuje do nowej wersji języka, w którym jest napisana.
Dlaczego hostingi wymuszają zmianę wersji PHP
PHP, tak jak każde oprogramowanie, ma ograniczony czas wsparcia. Każda wersja przez dwa lata dostaje poprawki błędów, a potem jeszcze przez dwa lata tylko poprawki bezpieczeństwa. Po tym czasie nikt nie łata w niej luk. Hosting, który trzyma tysiące stron na starym PHP, ryzykuje bezpieczeństwo całych serwerów, dlatego co jakiś czas wycofuje stare wersje.
Stan na 12 października 2026 roku według tabeli wspieranych wersji na php.net:
WordPress na stronie z wymaganiami zaleca PHP w wersji 8.3 lub nowszej. Rdzeń WordPressa działa na nowych wersjach PHP poprawnie. Problemem są dodatki: wtyczki i motywy, które nie były aktualizowane od lat, oraz kod pisany na zamówienie.
Co się psuje przy przejściu z PHP 7.4 na 8.x
Najwięcej awarii zdarza się przy przeskoku z gałęzi 7 na 8. PHP 8.0 usunął część starych funkcji i zamienił wiele dawnych ostrzeżeń na błędy, które zatrzymują wykonanie kodu. Poniżej przykłady, które najczęściej widuję w logach. Treść komunikatów sprawdziłem na PHP 8.3, a opisy zmian pochodzą z oficjalnych przewodników migracji na php.net: zmiany niekompatybilne w PHP 8.0, przestarzałe elementy w PHP 8.1 i w PHP 8.2.
| Komunikat w logu | Co się zmieniło | Skutek |
|---|---|---|
Call to undefined function create_function() | Funkcja usunięta w PHP 8.0, zastępują ją funkcje anonimowe | Fatal error |
Call to undefined function each() | Funkcja usunięta w PHP 8.0, zastępuje ją pętla foreach | Fatal error |
count(): Argument #1 ($value) must be of type Countable|array, null given | Od PHP 8.0 count() na czymś, co nie jest tablicą ani obiektem Countable, rzuca TypeError. W PHP 7.2–7.4 było to tylko ostrzeżenie | Fatal error |
Unsupported operand types: string + int | Działania arytmetyczne na tekście, który nie jest liczbą, albo na tablicy rzucają w PHP 8 TypeError | Fatal error |
Attempt to assign property "x" on null | Zapis właściwości do czegoś, co nie jest obiektem, jest w PHP 8 błędem. Wcześniej PHP tworzył obiekt i zgłaszał tylko ostrzeżenie | Fatal error |
Call to undefined function get_magic_quotes_gpc() | Funkcja usunięta w PHP 8.0, spotykana w bardzo starym kodzie | Fatal error |
Creation of dynamic property Klasa::$pole is deprecated | Od PHP 8.2 tworzenie niezadeklarowanych właściwości obiektu jest oznaczone jako przestarzałe | Deprecated, strona działa |
Passing null to parameter #1 … is deprecated | Od PHP 8.1 przekazanie null do wbudowanych funkcji oczekujących tekstu lub liczby jest oznaczone jako przestarzałe | Deprecated, strona działa |
Undefined array key "x" | W PHP 8.0 dawny Notice stał się Warning. Częściej widoczny w logach, ale nie zatrzymuje strony | Warning, strona działa |
Po zmianie PHP log często zapełnia się setkami linii PHP Deprecated, zwłaszcza od PHP 8.2 z komunikatem o dynamicznych właściwościach. To ostrzeżenie dla programistów, że dana konstrukcja zniknie w którejś z przyszłych wersji. Strona działa normalnie. Szukaj linii PHP Fatal error i PHP Parse error, bo tylko one zatrzymują stronę.
Jest jeszcze jedna zmiana, która potrafi wyglądać jak awaria: od PHP 8.0 domyślny poziom raportowania błędów obejmuje wszystkie komunikaty, także te, które wcześniej były ukryte. Jeśli serwer ma włączone wyświetlanie błędów, ostrzeżenia mogą pojawić się na stronie jako tekst nad nagłówkiem albo rozbić odpowiedzi formularzy. Na stronie produkcyjnej wyświetlanie błędów powinno być wyłączone, a błędy zapisywane do logu.
Szybki powrót do poprzedniej wersji PHP
Gdy strona leży, najpierw przywróć jej działanie, a dopiero potem szukaj przyczyny. Jeśli hosting nadal oferuje poprzednią wersję PHP, powrót trwa kilka minut.
-
Znajdź w panelu hostingu ustawienia PHP
Każdy hosting nazywa to miejsce inaczej, ale zawsze jest to część ustawień domeny, strony lub konta. Szukaj wyboru wersji PHP przy konkretnej domenie albo w ustawieniach całego konta. Na wielu hostingach wersję PHP można ustawić osobno dla każdej strony, więc upewnij się, że zmieniasz ją dla właściwej domeny.

Widok poglądowyWybór wersji PHP osobno dla każdej strony. Gdy hosting sam podniósł wersję, wróć na chwilę do poprzedniej, a potem napraw dodatki. Widok odtworzony na przykładowych danych. -
Wybierz wersję, na której strona działała
Jeśli nie wiesz, która to była, sprawdź mail od hostingu o zmianie wersji albo zapytaj pomoc techniczną. Zapisz zmianę i odczekaj chwilę, bo na części serwerów zmiana wersji nie działa natychmiast.
-
Sprawdź stronę i zanotuj termin
Otwórz stronę w oknie prywatnym. Jeśli działa, masz czas na przygotowanie. Dowiedz się od hostingu, jak długo stara wersja będzie dostępna. Ten termin to Twój termin na naprawę.
Część hostingów usuwa wycofane wersje całkowicie, inne udostępniają je jeszcze przez jakiś czas. Zasady sprawdzisz w komunikacie hostingu o zmianie wersji. Jeśli powrót jest niemożliwy, przejdź od razu do diagnozy. Wyłączenie winnej wtyczki zwykle przywraca stronę szybciej niż jakiekolwiek obejście.
Wersję PHP, na której faktycznie działa strona, sprawdzisz w WordPressie w Narzędzia, Zdrowie witryny, zakładka Informacje, sekcja Serwer. Panel Zdrowia witryny ostrzega też, gdy wersja PHP jest przestarzała.
Jak znaleźć winny dodatek
Kolejność postępowania ilustruje drzewo poniżej. Kluczowe jest rozróżnienie: czy strona stoi teraz, czy przygotowujesz ją do zmiany, która dopiero nastąpi.
-
Włącz zapis błędów
W pliku
wp-config.php, powyżej komentarza „stop editing”, zamień linię zWP_DEBUGna:define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); @ini_set( 'display_errors', 0 );Jeśli strona działa już na starym PHP, rób to na kopii strony z nową wersją PHP, nie na stronie produkcyjnej.
-
Odczytaj ścieżkę z linii Fatal error
Otwórz
wp-content/debug.logi znajdź na końcu linięPHP Fatal error. Fragment ścieżki powp-content/plugins/lubwp-content/themes/to nazwa winnego dodatku. Szczegółowy opis budowy tej linii znajdziesz w artykule o błędzie krytycznym WordPress. -
Wyłącz dodatek i powtórz
Zmień nazwę katalogu wtyczki (np. dopisując
.off) albo wyłącz ją przez WP-CLI:wp plugin deactivate nazwa --skip-plugins --skip-themes. Odśwież stronę. Często po wyłączeniu jednej wtyczki ujawnia się kolejna, więc powtarzaj, aż strona zadziała, i notuj wszystkie nazwy. -
Zdecyduj o każdym dodatku z listy
Sprawdź, czy jest nowsza wersja i czy autor deklaruje zgodność z nowym PHP. Na stronach wtyczek w katalogu wordpress.org widać datę ostatniej aktualizacji i minimalną wersję PHP. Wtyczka bez aktualizacji od kilku lat najpewniej nie zostanie już poprawiona.
Sprawdzenie kodu przed zmianą: PHP Compatibility
Jeśli masz dostęp do SSH lub możesz pobrać kopię strony na komputer, sprawdź kod automatycznie, zanim zmienisz wersję PHP. Służy do tego zestaw reguł PHPCompatibilityWP dla narzędzia PHP_CodeSniffer, przygotowany z myślą o WordPressie. Instaluje się go przez Composer, a uruchamia na katalogu z wtyczkami i motywami:
# instalacja w osobnym katalogu roboczym
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer require --dev phpcompatibility/phpcompatibility-wp:"*"
# sprawdzenie zgodności z PHP 8.3 i nowszymi
vendor/bin/phpcs -p ścieżka/do/wp-content --standard=PHPCompatibilityWP --extensions=php --runtime-set testVersion 8.3-
Stabilna wersja PHPCompatibilityWP (2.x) nie zna większości zmian wprowadzonych w PHP 8, więc wynik bez błędów nie oznacza, że strona zadziała. Wersja 3.0, która je obsługuje, jest na razie w fazie testów. Traktuj skan jako szybkie wskazanie podejrzanych miejsc, a ostateczny test zrób na kopii strony (stagingu) z ustawioną nową wersją PHP i włączonym logiem błędów.
Narzędzie analizuje kod bez uruchamiania go, więc nie wyłapie wszystkiego. Dobrze znajduje usunięte funkcje i przestarzałe konstrukcje, gorzej problemy z typami danych, które wychodzą dopiero w działaniu. Dlatego wynik traktuj jako listę podejrzanych, a ostateczny test rób na kopii strony.
Firma usługowa ma stronę zrobioną kilka lat temu na motywie kupionym na rynku motywów. Hosting zapowiada wycofanie PHP 7.4, wiadomość trafia do skrzynki, której nikt nie czyta. Po przełączeniu strona pokazuje błąd krytyczny. W logu jest count(): Argument #1 ($value) must be of type Countable|array, null given w pliku motywu. Powrót do starego PHP jest jeszcze możliwy przez kilka tygodni, więc strona wraca od razu. W tym czasie na kopii strony motyw zostaje zaktualizowany do wersji zgodnej z PHP 8, kilka jego plików w motywie potomnym poprawionych, a dwie porzucone wtyczki wymienione. Potem strona przechodzi od razu na PHP 8.3.
Plan migracji na PHP 8.3 lub nowsze
Najlepiej przygotować stronę, zanim hosting zmieni wersję za Ciebie. Biorąc pod uwagę, że PHP 8.2 traci wsparcie 31 grudnia 2026 roku, a 8.1 i starsze już go nie mają, wiele stron czeka ta zmiana w najbliższych miesiącach. Plan, który stosuję:
-
Inwentaryzacja
Sprawdź obecną wersję PHP (Zdrowie witryny) i zrób listę wtyczek i motywów z wersjami:
wp plugin list --fields=name,status,version,update. Datę ostatniej aktualizacji każdej wtyczki sprawdź na jej stronie w katalogu wordpress.org. Zaznacz te bez aktualizacji od ponad roku i te z płatnych źródeł. -
Aktualizacja na obecnym PHP
Zaktualizuj WordPressa, wtyczki i motyw, jeszcze na starej wersji PHP. Nowe wersje dodatków zwykle zawierają poprawki zgodności. Zrób to z kopią zapasową, zgodnie z procedurą z artykułu Strona nie działa po aktualizacji.
-
Kopia testowa z nowym PHP
Postaw kopię strony (staging) i ustaw na niej docelową wersję PHP. Włącz log błędów. Przejdź wszystkie ważne ścieżki: strona główna, podstrony, formularze, koszyk i zamówienie, logowanie i panel.
-
Wymiana i poprawki
Dodatki, które zgłaszają Fatal error i nie mają nowszych wersji, wymień na rozwijane odpowiedniki. Kod na zamówienie, w tym
functions.phpmotywu potomnego, popraw zgodnie z komunikatami z logu. -
Przełączenie strony
Zmień wersję PHP na stronie produkcyjnej w godzinach małego ruchu, z kopią zrobioną tuż przed zmianą. Sprawdź stronę jako gość i przez kilka dni przeglądaj log. Gdy wszystko działa, wyłącz debugowanie i usuń
debug.log.
Jeśli wszystkie dodatki deklarują zgodność z PHP 8.4, wybierz 8.4, bo ma wsparcie bezpieczeństwa do końca 2028 roku. PHP 8.3 jest bezpiecznym wyborem do końca 2027 roku i ma najszersze wsparcie wśród starszych wtyczek.
Kiedy nie robić tego samemu
Powrót do starego PHP i znalezienie winnej wtyczki zrobisz samodzielnie. Pomoc programisty przyda się, gdy:
- błędy są w motywie lub kodzie pisanym na zamówienie, a nie ma kto go poprawić,
- stara wersja PHP nie jest już dostępna, a strona musi działać od zaraz,
- strona używa porzuconych dodatków, których nie da się po prostu wymienić, bo na nich opiera się sklep lub ważna funkcja,
- PHP Compatibility zwraca setki błędów i nie wiesz, od czego zacząć.
Proste przypadki z jedną winną wtyczką mieszczą się w Szybkiej Interwencji. Migracja strony z dużą ilością własnego kodu jest wyceniana indywidualnie, przed rozpoczęciem prac. Więcej o tym, od czego zależy koszt, w artykule Ile kosztuje naprawa strony internetowej.
Hosting zmienił PHP i strona nie działa?
Przywrócę działanie strony, znajdę niezgodne dodatki i przygotuję ją do PHP 8.3 lub nowszego. Naprawa jednej awarii to 299 zł netto z 7-dniową gwarancją. Zgłoszenia awaryjne przyjmuję całą dobę.
Najczęstsze pytania
Czy mogę zostać na starej wersji PHP na stałe?
Nie. PHP 8.1 i starsze nie dostają już poprawek bezpieczeństwa, a PHP 8.2 dostaje je tylko do 31 grudnia 2026 roku. Hostingi stopniowo wycofują stare wersje, a nowe wersje wtyczek przestają je obsługiwać. Powrót do starszej wersji to sposób na kilka dni lub tygodni, w czasie których przygotowujesz stronę do nowej.
Na którą wersję PHP przejść?
WordPress zaleca PHP 8.3 lub nowsze. PHP 8.3 ma wsparcie bezpieczeństwa do końca 2027 roku, PHP 8.4 do końca 2028, a PHP 8.5 do końca 2029. Jeśli wszystkie wtyczki i motyw deklarują zgodność z 8.4, wybierz 8.4. Jeśli nie masz pewności, 8.3 to bezpieczny wybór na najbliższy rok.
W logu po zmianie PHP jest mnóstwo komunikatów Deprecated. Czy to awaria?
Nie. Komunikat Deprecated to ostrzeżenie, że jakaś konstrukcja zostanie usunięta w przyszłej wersji PHP. Strona działa normalnie. Warto go przekazać autorowi wtyczki lub motywu, bo w kolejnej wersji PHP może zmienić się w błąd. Awarię powoduje komunikat Fatal error albo Parse error.
Czy aktualizacja wszystkich wtyczek naprawi błędy po zmianie PHP?
Najczęściej tak, jeśli wtyczki są rozwijane. Problem stanowią dodatki porzucone przez autorów, pirackie kopie płatnych wtyczek, stare motywy kupione lata temu i kod pisany na zamówienie. Ich aktualizacja nie istnieje, więc trzeba je wymienić albo poprawić kod.