naprawa-stron.pl Online 24/7 Zgłoś awarię

Strona nie działa po zmianie PHP – przyczyny i plan naprawy

Autor: Grzegorz Wojterzak. Aktualizacja: 12 października 2026. Czas czytania: około 12 minut.

$ diagnoza awaria po zmianie wersji PHP
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:

Oś czasu wsparcia wersji PHP 8.2–8.5 z zaznaczoną datą 12 października 2026 Oś lat od 2023 do 2030. PHP 8.2: wsparcie bezpieczeństwa do 31.12.2026, zostało niecałe trzy miesiące. PHP 8.3: wsparcie bezpieczeństwa do 31.12.2027. PHP 8.4: aktywne wsparcie do 31.12.2026, bezpieczeństwo do 31.12.2028. PHP 8.5, wydane 20.11.2025: wsparcie bezpieczeństwa do 31.12.2029. PHP 8.1 i starsze nie mają już wsparcia. 2023 2024 2025 2026 2027 2028 2029 2030 8.2 do 31.12.2026 8.3 do 31.12.2027 8.4 do 31.12.2028 8.5 do 31.12.2029 dziś: 12.10.2026 aktywne wsparcie tylko poprawki bezpieczeństwa 8.1 i starsze: brak wsparcia
PHP 8.2 traci wsparcie z końcem 2026 roku. Kto przechodzi na nowszą wersję teraz, powinien wybrać co najmniej 8.3.

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 loguCo się zmieniłoSkutek
Call to undefined function create_function()Funkcja usunięta w PHP 8.0, zastępują ją funkcje anonimoweFatal error
Call to undefined function each()Funkcja usunięta w PHP 8.0, zastępuje ją pętla foreachFatal error
count(): Argument #1 ($value) must be of type Countable|array, null givenOd 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żenieFatal error
Unsupported operand types: string + intDziałania arytmetyczne na tekście, który nie jest liczbą, albo na tablicy rzucają w PHP 8 TypeErrorFatal error
Attempt to assign property "x" on nullZapis 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żenieFatal error
Call to undefined function get_magic_quotes_gpc()Funkcja usunięta w PHP 8.0, spotykana w bardzo starym kodzieFatal error
Creation of dynamic property Klasa::$pole is deprecatedOd PHP 8.2 tworzenie niezadeklarowanych właściwości obiektu jest oznaczone jako przestarzałeDeprecated, strona działa
Passing null to parameter #1 … is deprecatedOd PHP 8.1 przekazanie null do wbudowanych funkcji oczekujących tekstu lub liczby jest oznaczone jako przestarzałeDeprecated, strona działa
Undefined array key "x"W PHP 8.0 dawny Notice stał się Warning. Częściej widoczny w logach, ale nie zatrzymuje stronyWarning, strona działa
Deprecated to nie awaria

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.

  1. 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.

    Wybór wersji PHP dla strony w panelu hostingu
    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.
  2. 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.

  3. 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ę.

Gdy starej wersji już nie ma

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.

Drzewo decyzyjne po zmianie wersji PHP Start: strona nie działa po zmianie PHP. Pytanie: czy można wrócić do starszej wersji w panelu hostingu. Tak: wróć, strona działa, potem test na kopii z nową wersją. Nie: włącz log błędów. Następnie pytanie: czy w logu jest Fatal error. Tak: sprawdź ścieżkę; wtyczka lub motyw z aktualizacją: zaktualizuj; bez aktualizacji lub porzucony: wymień na inny; własny kod: poprawka przez programistę. Nie, tylko Deprecated lub Warning: to nie przyczyna, sprawdź cache i konfigurację serwera. Strona padła po zmianie PHP Starsza wersja PHP jest jeszcze dostępna? tak Wróć do niej strona działa, a diagnozę robisz na kopii strony z nową wersją PHP nie Włącz log błędów WP_DEBUG_LOG lub error_log hostingu Czyja ścieżka jest w „Fatal error”? Dodatek rozwijany zaktualizuj go Dodatek porzucony wymień na inny Kod na zamówienie poprawka w kodzie Brak Fatal error cache, serwer
Powrót do starszego PHP nie kończy pracy. Daje tylko czas, żeby przejść dolną część drzewa bez presji.
  1. Włącz zapis błędów

    W pliku wp-config.php, powyżej komentarza „stop editing”, zamień linię z WP_DEBUG na:

    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.

  2. Odczytaj ścieżkę z linii Fatal error

    Otwórz wp-content/debug.log i znajdź na końcu linię PHP Fatal error. Fragment ścieżki po wp-content/plugins/ lub wp-content/themes/ to nazwa winnego dodatku. Szczegółowy opis budowy tej linii znajdziesz w artykule o błędzie krytycznym WordPress.

  3. 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.

  4. 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-
Skan to pomoc, nie gwarancja

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.

Typowy scenariusz

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ę:

  1. 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ł.

  2. 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.

  3. 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.

  4. 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.php motywu potomnego, popraw zgodnie z komunikatami z logu.

  5. 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.

Grzegorz Wojterzak naprawia strony internetowe po awariach i włamaniach: WordPress, WooCommerce, PHP i Node.js. Od ponad dekady pracuje przy stronach i sklepach internetowych polskich firm.