Način za odpravljanje napak WordPress upravljajo tri konstante v datoteki wp-config.php. WP_DEBUG je glavno stikalo; WP_DEBUG_LOG napake zapiše v datoteko, WP_DEBUG_DISPLAY pa na stran. Dokler je WP_DEBUG izklopljen, sta drugi dve brez učinka.
Ena pomembna osnovna vrednost povzroča največ presenečenj: vrednost WP_DEBUG_DISPLAY je sama od sebe true. Če kdo vklopi le konstanto WP_DEBUG, se opozorila PHP prikažejo tudi obiskovalcem, skupaj s potmi strežnika. Na živem spletnem mestu je varna ta nastavitev: WP_DEBUG vklopljen, WP_DEBUG_DISPLAY izklopljen, WP_DEBUG_LOG pa piše v datoteko, ki ni dosegljiva s spleta.
Kaj naredi posamezna konstanta?
WP_DEBUG. Če je true, PHP javlja vsa opozorila, opombe in oznake zastarelosti, WordPress pa tudi uporabo zastarelih funkcij javi kot napako. Če je false (to je osnovna vrednost), se beležijo le hude napake.
WP_DEBUG_DISPLAY. Če je true ali ni naveden, se napaka prikaže v HTML strani. Če je false, se ne prikaže. Pri zahtevah REST API, AJAX in XML-RPC WordPress prikaz vedno izklopi, da sporočilo o napaki ne pokvari odgovora JSON; če napako vidiš na strani, v odgovoru REST pa ne, je to torej namerno.
WP_DEBUG_LOG. Če je true, napake pridejo v datoteko wp-content/debug.log. To datoteko je mogoče prenesti tudi s spleta, odpre jo lahko vsak, ki ugane njen naslov, in vsebuje celotne poti strežnika, včasih tudi podrobnosti podatkovne baze. Če namesto true navedeš absolutno pot, WordPress piše tja, tako lahko dnevnik postaviš zunaj mape public_html. Če je false, WordPress beleženja ne spreminja, napake pa pridejo v lastni dnevnik PHP gostovanja.
SCRIPT_DEBUG. Ne gre za napake PHP: WordPress naloži nestisnjene različice svojih datotek JavaScript in CSS, zato v konzoli brskalnika napaka kaže na berljivo vrstico. Na lastne, stisnjene datoteke vtičnikov večinoma ne vpliva.
Kje so napake na gostovanju cPanel aWh?
Na gostovanju cPanel PHP privzeto beleži v datoteko logs/php.error.log domačega imenika, zato hude napake najdeš tudi, ko je način za odpravljanje napak WordPress izklopljen. V korenu spletnega mesta lahko nastane tudi datoteka error_log. Obe lahko odpreš v Upravitelju datotek ali v Terminalu:
tail -n 20 ~/logs/php.error.log
Če v dnevniku ni ničesar ali te zanimajo tudi opozorila, vklopi način za odpravljanje napak. O razlagi vnosov v dnevnik podrobno piše naš blogovski zapis.
Vklop načina za odpravljanje napak
V WP Toolkit
V vmesniku WordPress Management v cPanelu odpri kartico spletnega mesta in v razdelku Orodja vklopi stikalo Odpravljanje težav. Ko končaš, ga izklopi.
Z WP-CLI
Najprej shrani datoteko wp-config.php, ker tipkarska napaka ustavi celotno spletno mesto:
cd ~/public_html
cp -p wp-config.php ~/wp-config.php.bak-$(date +%F)
wp config set WP_DEBUG true --raw
wp config set WP_DEBUG_DISPLAY false --raw
wp config set WP_DEBUG_LOG /home/felhasznalonev/logs/wp-debug.log
Stikalo --raw logično vrednost vpiše brez narekovajev; pri poti ga izpusti, ker mora biti ta v narekovajih. Namesto felhasznalonev vpiši svoje uporabniško ime cPanel (izpiše ga ukaz whoami). WP-CLI nove konstante vstavi na pravo mesto, in če je v datoteki že vrstica WP_DEBUG (na spletnih mestih, nameščenih z WP Toolkit, je), to spremeni. Osnove WP-CLI opisuje članek o uporabi WP-CLI.
Ročno, v Upravitelju datotek
Odpri datoteko wp-config.php za urejanje, poišči obstoječo vrstico WP_DEBUG in jo zamenjaj s temi tremi vrsticami:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', '/home/felhasznalonev/logs/wp-debug.log' );
Vrstice morajo biti nad komentarjem /* That's all, stop editing! Happy publishing. */. Kar pride pod vrstico require_once ABSPATH . 'wp-settings.php'; na koncu datoteke, se izvede prepozno in je brez učinka. Konstanto navedi le enkrat: če je v datoteki dvakrat, PHP opozori, velja pa prva.
Preverjanje
wp eval 'var_dump( WP_DEBUG, WP_DEBUG_LOG, WP_DEBUG_DISPLAY, ini_get( "error_log" ) );'
Odgovor na našem testnem spletnem mestu:
bool(true)
string(38) "/home/felhasznalonev/logs/wp-debug.log"
bool(false)
string(38) "/home/felhasznalonev/logs/wp-debug.log"
Zadnja vrstica dokazuje, da je WordPress nastavitev dejansko uporabil. Nato naloži napačno stran in poglej dnevnik:
tail -n 20 ~/logs/wp-debug.log
Na koncu preveri, da se na strani nič ne prikaže:
curl -s https://pelda.hu/ | grep -icE "Warning:|Notice:|Deprecated:|Fatal error:"
Pravilen odgovor je 0. Če je število večje, nekaj prikaz pozneje vklopi nazaj; večinoma vtičnik. Poiščeš ga takole: grep -rn "display_errors" ~/public_html/wp-content/plugins/.
Če dnevnik ostane prazen
- Konstante so na napačnem mestu. Primerjaj številke vrstic:
grep -n "wp-settings\|WP_DEBUG" wp-config.php. VrsticeWP_DEBUGmorajo imeti manjšo številko. - V poti je tipkarska napaka. Tudi zatipkana pot je veljavno besedilo, WordPress jo nastavi, PHP pa tja tiho ne more pisati. Preveri, ali mapa obstaja.
- Nekaj prepiše nastavitev. Če
ini_get( "error_log" )ne vrne tvoje poti, jo spreminja vtičnik ali vtičnik must-use (wp-content/mu-plugins). - Proces se je ustavil pred PHP. Če stran vrne prazno napako 500 in v nobenem dnevniku ni ničesar, zahteva ni prišla do obravnave napak PHP. Takrat je vredno pogledati stran Napake v skupini Meritve v cPanelu in omejitve virov CloudLinux.
Naj ne ostane po nepotrebnem vklopljen
WordPress in PHP dnevnika ne kolobarita. Vtičnik, ki ob vsakem nalaganju strani izpiše isto oznako zastarelosti, v nekaj dneh ustvari datoteko velikosti več gigabajtov, ki porablja tvoj prostor in število datotek (inode). Po odkritju napake:
- izklopi konstanto
WP_DEBUG(wp config set WP_DEBUG false --raw) ali stikalo WP Toolkit Odpravljanje težav; - vsebine dnevnika ne briši, temveč ga izprazni:
: > ~/logs/wp-debug.log, nato, ko ga ne potrebuješ več, datoteko izbriši; - če je dnevnik poln istega opozorila, je treba ta vtičnik ali predlogo popraviti ali zamenjati; skrivanje sporočil odpravi le simptom.
Način za odpravljanje napak prikazuje izključno napake PHP: počasne poizvedbe v podatkovni bazi ali bližine omejitve pomnilnika ne. Če je spletno mesto počasno, pomagata članek o pospešitvi WordPressa in članek o omejitvi pomnilnika; iskanje napak pri belem zaslonu pa opisuje ločen članek.
