Błąd 500 podczas aktualizacji do PHP 8

 
Błąd 500 podczas aktualizacji do PHP 8

W listopadzie ubiegłego roku pojawił się PHP 8, który zapowiadał poprawę wydajności, szybkości i bezpieczeństwa.

Jak każdy dobry majsterkowicz, pobiegłem zaktualizować wersję 7.4, a konkretnie 7.4.16, która obecnie działa na serwerze.

plof! przywitał mnie miły błąd 500 i zepsuł całą witrynę. Żaden adres URL nie został rozwiązany.

Wykonałem typowy test polegający na wyłączeniu wszystkich wtyczek i użyciu domyślnego szablonu. Błąd 500 nie zniknął.

Byłem zszokowany, ale zdałem sprawę przekonany, że jest jeszcze za wcześnie na aktualizację i, jak radzili, najlepiej poczekać, aż wszyscy autorzy wtyczek i szablonów zaktualizują swój kod, aby był kompatybilny z PHP 8.

Prawie siedem miesięcy później spróbowałem ponownie i błąd 500 nadal występował.

Pierwszą wskazówką, że źródłem błędu jest tylko ten blog, jest to, że w pozostałych dwóch instalacjach WordPressa, które mam na tym samym serwerze, wszystko działa poprawnie.

Ponieważ błąd 500 może pojawić się z wielu powodów. Następnym logicznym krokiem jest wyciągnięcie dzienników błędów, aby spróbować dowiedzieć się, co jest nie tak. Pojawia się następujący ciąg ostrzeżeń:

PHP Warning: Use of undefined constant minor - assumed 'minor' (this will throw an Error in a future version of PHP) in /home/xxxxxx/public_html/blog/wp-config.php on line 11

Ostrzeżenie PHP: Use of the undefined constant minor - assumed 'minor' (this will throw an Error in a future version of PHP).

Oznacza to, że stała powinna być ujęta w cudzysłów. Idę do wp-config.php i rzeczywiście, minor pojawia się bez cudzysłowów w tej linii.

define ('WP_AUTO_UPDATE_CORE', minor);

Przeszukując forum WordPress stwierdzam, że wiele osób miało ten sam problem z aktualizacją do starszych wersji PHP z powodu konfliktów z wtyczką lub szablonem.

Nie można również wykluczyć, że problem jest związany z instalacją WordPressa, która ma coś zepsutego, jak powiedziano mi w zgłoszeniu, które wysłałem do LucusHost.

W niektórych otrzymanych odpowiedziach piszą, że aby rozwiązać problem wystarczy dodać cudzysłów do "minor", więc proszę spróbować i tak właśnie zrobiłem

define ('WP_AUTO_UPDATE_CORE', 'minor');

WP_AUTO_UPDATE_CORE pozwala kontrolować aktualizacje rdzenia WordPressa dla wersji minor, major i development. Ta stała może być zdefiniowana na kilka sposobów. Usunięcie tej linii nie jest dobrym pomysłem.

#Wyłącza wszystkie aktualizacje rdzenia:

define( 'WP_AUTO_UPDATE_CORE', false );

# Włącza wszystkie aktualizacje, w tym mniejsze i większe aktualizacje:

define( 'WP_AUTO_UPDATE_CORE', true );

# Włącza pomniejsze aktualizacje:

define( 'WP_AUTO_UPDATE_CORE', 'minor' );

Dobra i zła wiadomość.

Dobra wiadomość jest taka, że teraz, po uruchomieniu PHP 8, błąd 500 zniknął.

Na pierwszy rzut oka wszystko wydaje się działać dobrze, zarówno wtyczki, jak i posty.

Zła wiadomość jest taka, że indeks jest uszkodzony i wygląda tak.

Błąd 500 podczas aktualizacji do PHP 8 1

Postanowiłem najpierw zaatakować szablon postu, wykonany za pomocą Elementora Pro, na wypadek, gdyby konstruktor zostawił jakieś ukryte śmieci, ale po przejrzeniu go i całkowitym przerobieniu wykluczyłem, że błąd pochodzi stamtąd.

Teraz wciąż sprawdzam szablon(GeneratePress Premium) w środowisku testowym i przynajmniej wiem, gdzie się psuje, ale głównie szukam w WordPressie, który moim zdaniem jest sednem sprawy, jakiś nieaktualny kod wciągnięty, jakiś filtr zatkany smarem lub cokolwiek innego.

Zostawiam tę notatkę tutaj na wypadek, gdyby ktoś miał podobny problem i byłoby to pomocne, lub to, co tu napisałem, lub wie dużo o WP i może dać mi więcej wskazówek, aby go rozwiązać.

Jak tylko znajdę ostateczne rozwiązanie i możliwe wyjaśnienie, zaktualizuję ten post.

Aktualizacja

Dziennik błędów, po włączeniu DEBUG, daje wskazówki, że GeneratePress gdzieś się zawiesza, być może z powodu jakiegoś haka lub filtra, który umieściłem w jego module Elements (lub czymkolwiek innym).

Ponieważ mam szablon potomny GeneratePress, jestem zagubiony i nie wiem, dokąd się stąd udać, ale ponieważ mam kilka podejrzeń, nie uważam jeszcze misji za nieudaną.

Błąd krytyczny: Uncaught TypeError: Unsupported operand types: string int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169 Stack trace: #0

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(419): generate_do_post_meta_item() #1

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(538): generate_posted_on() #2

/home/ public_html/blog/wp-includes/class-wp-hook.php(292): generate_post_meta() #3

/home/ public_html/blog/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters() #4

/blog/wp-includes/plugin.php(484): WP_Hook->do_action() #5

/blog/wp-content/themes/generatepress/content.php(48): do_action() #6

/blog/wp-includes/template.php(732): require('/home/ ...') #7

/blog/wp-includes/template.php(676): load_template() #8

/blog/wp-includes/general-template.php(204): locate_template() #9

/blog/wp-content/themes/generatepress/inc/theme-functions.php(587): get_template_part() #10

/blog/wp-content/themes/generatepress/index.php(37): generate_do_template_part() #11

/blog/wp-includes/template-loader.php(106): include('/home/ ...') #12

/blog/wp-blog-header.php(19): require_once('/home/ ...') #13

/blog/index.php(17): require('/home/ ...') #14

{main} rzucone w /blog/wp-content/themes/generatepress/inc/structure/post-meta.php na linii 169

naprawione! No, prawie

Na szczęście kluczowa okazała się pierwsza linijka, w której pojawiały się wszystkie błędy z tej długiej listy:

Błąd krytyczny: Uncaught TypeError: Unsupported operand types: string int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169

Błąd 500 podczas aktualizacji do PHP 8 2

Tajemnica błędu tkwiła w jakiejś nieobsługiwanej operacji cholernego get_the_time .

Łącząc to wszystko razem, podejrzenia się potwierdziły. Błąd został spowodowany przez ten fragment funkcji, którego użyłem do pokazania dnia i godziny aktualizacji jako rozszerzenia meta w dacie.

Co gorsza, nie wiem jak, ale pozostał on rezydentny po wyłączeniu Code Snippets i wyczyszczeniu pamięci podręcznej.

Błąd 500 podczas aktualizacji do PHP 8 3

Morał z tej historii, proszę nie używać funkcji, które działają dobrze dla innych, ponieważ każda strona ma swoją własną historię i jest bardzo prawdopodobne, że coś zepsują, jeśli o nich zapomnisz, zaktualizujesz WP, PHP, szablon lub wtyczkę i nie będą już kompatybilne.

Po usunięciu tego fragmentu wszystko działa dobrze, a strona główna wraca do normy.

Nie ma dwóch bez trzech, kolejny błąd. Teraz Feedzy

Ale proszę jeszcze nie odchodzić, teraz wtyczka Feedzy (jak sądzę) lub coś z nią związanego psuje stronę z wiadomościami.

Błąd 500 podczas aktualizacji do PHP 8 4

Nadszedł czas, aby otworzyć zgłoszenie do pomocy technicznej, ponieważ jest to wersja płatna, aby poinformować twórców wtyczki, czy jest ona w 100% kompatybilna z PHP 8 (i czy psuje się, ponieważ nie jest) lub uzyskać od nich wskazówkę.

02/07/2021- Feedly odtworzyło fatalny błąd przy użyciu PHP 8 i przekazało problem swoim programistom, teraz musimy poczekać, aż wydadzą nową wersję wtyczki, która naprawi problem.

05/07/2021- Opis błędu jest już dostępny na ich Githubie.

06/07/2021 - Chociaż nie odpowiedzieli jeszcze ani nie wydali nowej wersji z poprawką, w tym zatwierdzeniu można znaleźć linie kodu, które to naprawiają. Przetestowałem to i, w oczekiwaniu na dobre i dokładne testy, wydaje się, że PHP 8 niczego już nie psuje.

Podsumowując

Nie jest źle. Od posiadania błędu 500, który zepsuł cały blog, do posiadania go tylko na stronie głównej i wreszcie na jednej"drugorzędnej" stronie, aby w końcu znaleźć poprawkę, wystarczy, aby być zadowolonym z godzin zainwestowanych w naprawę.

Kluczem do wszystkiego jest badanie, spędzanie całego czasu na szukaniu źródła i tego, co powoduje w innych częściach bloga. Proszę nie próbować szybkich rozwiązań bez wystarczających wskazówek, ponieważ albo stracą Państwo czas, albo w zły sposób zepsują coś innego.

Zaktualizuję ponownie, gdy uda mi się pokonać nowy błąd za pomocą Feedzy lub cokolwiek to jest tym razem.

Suscríbete para recibir los post en tu email sin publicidad

Powiązane artykuły

Este blog se aloja en LucusHost

LucusHost, el mejor hosting