WordPress: w witrynie wystąpił błąd krytyczny. Jak żyć?

Czy przydarzył Ci się kiedyś błąd krytyczny w WordPressie? Wystarczy, że zapomnisz średnika w kodzie PHP i problem gotowy. Kłopot może się też pojawić po aktualizacji PHP do wersji 8, ponieważ ta wersja PHP jest znacznie bardziej restrykcyjna niż poprzednie i to, co kiedyś było tylko ostrzeżeniem, teraz może spowodować błąd krytyczny.

Włączenie trybu debugowania

Komunikat na ekranie nie mówi zbyt wiele: „W witrynie wystąpił błąd krytyczny”. Aby dowiedzieć się więcej, włącz tryb debugowania.

Zaloguj się do strony przez FTP i znajdź plik wp-config.php. Znajduje się on w katalogu głównym Twojej strony:

Dodaj do tego pliku następujące linijki:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Ważne: powyższy kod musi być umieszczony przed linią /* That's all, stop editing! Happy publishing. */. Umieszczenie go za tą linią nie będzie miało spodziewanego efektu.

Teraz, gdy ponownie wejdziesz na swoją stronę i zobaczysz komunikat o błędzie krytycznym, błąd zostanie zapisany do pliku /wp-content/debug.log. Przykładowy plik debug.log będzie wyglądał tak:

[12-May-2022 14:02:32 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function sdasd() in /home/panimarta/domains/panimarta.pl/public_html/wp-content/themes/panimarta/functions.php:195
Stack trace:
#0 /home/panimarta/domains/panimarta.pl/public_html/wp-settings.php(555): include()
#1 /home/panimarta/domains/panimarta.pl/public_html/wp-config.php(130): require_once('/home/panimarta/domains/panimarta.pl/public_html/wp-setting...')
#2 /home/panimarta/domains/panimarta.pl/public_html/wp-load.php(50): require_once('/home/panimarta/domains/panimarta.pl/public_html/wp-config....')
#3 /home/panimarta/domains/panimarta.pl/public_html/wp-blog-header.php(13): require_once('/home/panimarta/domains/panimarta.pl/public_html/wp-load.ph...')
#4 /home/panimarta/domains/panimarta.pl/public_html/index.php(17): require('/home/panimarta/domains/panimarta.pl/public_html/wp-blog-he...')
#5 {main}
  thrown in /home/panimarta/domains/panimarta.pl/public_html/wp-content/themes/panimarta/functions.php on line 195

Od razu wszystko robi się jaśniejsze 🙂 Jakimś cudem w moim pliku functions.php została wywołana funkcja sdasd(), która nie została zdefiniowana wcześniej 😀 Informacja w pliku debug.log jest wystarczająca, żeby błąd naprawić.

Wyłączenie trybu debugowania

Gdy problem zostanie naprawiony, wyłącz tryb debugowania. To ważne, bo plik debug.log jest dostępny publicznie, dla każdego. Zastąp poprzedni kod następującym:

define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

Następnie usuń plik debug.log.

Logowanie do innego pliku

Błędy mogą być logowane do pliku o innej nazwie. Można też zmienić jego lokalizację, żeby trudniej było go podejrzeć obcym.

Zamiast:

define( 'WP_DEBUG_LOG', true );

wklej do pliku wp-config.php coś takiego:

define( 'WP_DEBUG_LOG', '/home/panimarta/domains/panimarta.pl/public_html/bledy-wp.log' );

/home/panimarta/domains/panimarta.pl/public_html/bledy-wp.log to ścieżka bezwzględna na serwerze. Od teraz błędy będą logowane do pliku bledy-wp.log.

Pani Marta
Jestem Marta. Pani Marta. Od kilku lat pracuję w WordPressie i ciągle jestem pod wrażeniem jego możliwości. Na moim blogu dzielę się prostymi sposobami na bezwtyczkowe ulepszenie swojej strony. Jeśli brakuje Ci czegoś w tym wpisie lub chcesz, abym poruszyła temat, na którym Ci zależy, daj znać w komentarzu!

Dodaj komentarz

*

*

*

Twój adres e-mail nie zostanie opublikowany.