Dlaczego WordPress 5.5.3 z PHP 8 zwraca błąd 404 na każdej stronie witryny?
Artykuł omawia problemy z kompatybilnością WordPressa 5.5.3 z PHP 8, które powodują błędy 404 na każdej podstronie witryny. Główną przyczyną są przestarzałe wtyczki i motywy, które nie obsługują nowej wersji PHP.
Najnowsza wersja WordPressa 5.5.3 zwraca błąd 404 po przełączeniu na nowo wydaną wersję PHP 8. Dlaczego?
Oficjalnie WordPress będzie kompatybilny z PHP 8 dopiero od wersji 5.6, której wydanie zaplanowano na 8 grudnia 2020 roku. Wersja RC WordPressa 5.6 działa poprawnie z PHP 8 — problem został już naprawiony. Warto jednak zrozumieć, skąd właściwie bierze się ten problem.
Najpierw spróbujmy odpowiedzieć na pytanie: jaki jest wynik wyrażenia
'' < 0 //(pusty ciąg znaków jest mniejszy od zera)?
Pierwsza odpowiedź, która przychodzi na myśl, to false. Pusty ciąg znaków jest konwertowany do zera, więc otrzymujemy porównanie 0 < 0, którego wynik to false.
Tak zawsze działało to w PHP i przed PHP 8 wynik tego wyrażenia rzeczywiście był false. Jednak nie w PHP 8. Tutaj wynik wyrażenia to true, co zostało oficjalnie opisane. Porównanie z ciągiem znaków zawierającym liczbę wykorzystuje porównanie liczbowe. Pusty ciąg znaków nie jest jednak ciągiem numerycznym, dlatego PHP 8 wykorzystuje porównanie ciągów znaków: '' < '0', a wynik to true.
Co to ma wspólnego z WordPressem?
Rdzeń WordPressa zawiera metodę, która jest wywoływana przy każdym żądaniu: \WP_Query::parse_query. Znajdują się w niej następujące linie:
if ( !is_scalar( $qv['p'] ) || $qv['p'] < 0 ) {
$qv['p'] = 0;
$qv['error'] = '404';
...
W większości przypadków $qv['p'] zawiera pusty ciąg znaków, co powoduje spełnienie warunku if i ustawienie błędu 404.
W WordPressie 5.6 porównanie ciągów znaków wygląda następująco:
if ( !is_scalar( $qv['p'] ) || (int)$qv['p'] < 0 ) { ...
To rozwiązuje problem w PHP 8 i działa poprawnie we wszystkich wersjach PHP.
Nie należy korzystać z niejawnego rzutowania typów, szczególnie podczas tworzenia kodu, który ma działać z PHP 8.
Oryginalny artykuł można przeczytać tutaj
Powiązane wpisy
Wskazówki i spostrzeżenia z mojej drogi zawodowej
- Kategoria:
- Konserwacja
Krytyczne podatności PHP2Shell (CVE-2026-109618 i CVE-2026-109619): Analiza i instrukcja naprawy dla VPS
Gotowy, aby wynieść swój projekt
na wyższy poziom?
Wprowadźmy Twoją wizję w życie dzięki profesjonalnemu tworzeniu stron i dedykowanym rozwiązaniom.
Skontaktuj się z nami już teraz i rozpocznijmy pracę nad przekształceniem Twoich pomysłów w rzeczywistość!