{"id":230774,"date":"2022-12-04T16:40:00","date_gmt":"2022-12-04T13:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230774"},"modified":"2022-12-04T16:40:34","modified_gmt":"2022-12-04T13:40:34","slug":"wordpressin-virhelokien-lukeminen-ja-ymmaertaeminen-osa-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpressin-virhelokien-lukeminen-ja-ymmaertaeminen-osa-1\/","title":{"rendered":"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 1"},"content":{"rendered":"\n<p>Samalla kun tutkimme edelleen, mit\u00e4 tarkoittaa olla <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/the-independent-wordpress-developer\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">riippumaton WordPress-kehitt\u00e4j\u00e4<\/a><\/strong>, tarvittavia ty\u00f6kaluja ja erilaisia \u200b\u200bstrategioita, jotka voivat parantaa osaamistamme, olen k\u00e4ynyt l\u00e4pi erilaisia \u200b\u200bvakioita, laajennuksia ja ty\u00f6kaluja, jotka auttavat meit\u00e4.<\/p>\n<p>Jos olet vain t\u00f6rm\u00e4nnyt t\u00e4h\u00e4n viestiin, suosittelen <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/natiivit-wordpress-virheenkorjaustyoekalut-jotka-eivaet-vaadi-ide-tae\/\" title=\"tutustumaan oppaani alkuper\u00e4isiin WordPress-virheenkorjausty\u00f6kaluihin\">tutustumaan oppaani alkuper\u00e4isiin WordPress-virheenkorjausty\u00f6kaluihin<\/a><\/strong> sek\u00e4 sarjan <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/the-independent-wordpress-developer\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4h\u00e4n menness\u00e4 oleviin muihin viesteihin.<\/a><\/strong><\/p>\n<p>Loppujen lopuksi pid\u00e4n t\u00e4rke\u00e4n\u00e4, ett\u00e4 me kaikki ty\u00f6skentelemme samalla pohjalla \u2013 tai jollain l\u00e4heisesti liittyv\u00e4ll\u00e4 \u2013 kun k\u00e4ymme t\u00e4t\u00e4 tietoa l\u00e4pi.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e7490c88078.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e7490c88078.png\" alt=\"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 1\"><\/a><\/p>\n<p><strong><a href=\"https:\/\/xdebug.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Loppujen lopuksi Xdebugin<\/a><\/strong> kaltaisen ty\u00f6kalun k\u00e4ytt\u00f6 on v\u00e4ltt\u00e4m\u00e4t\u00f6nt\u00e4, mutta meid\u00e4n on pyritt\u00e4v\u00e4 siihen (uteliaisille <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/xdebugin-kaeyttoe-valetin-ja-wordpressin-kanssa\/\" title=\"kirjoitin lyhyen oppaan\">kirjoitin lyhyen oppaan<\/a><\/strong> t\u00e4st\u00e4 hieman yli vuosi sitten).<\/p>\n<p>Aloitetaan nyt kuitenkin perusasioista. Edellisess\u00e4 viestiss\u00e4 poistuin seuraavalla lausunnolla:<\/p>\n<blockquote>\n<p>Seuraavassa viestiss\u00e4 alamme tarkastella, mit\u00e4 tarvitaan WordPressin luoman virhelokin tutkimiseen ja kuinka ymm\u00e4rt\u00e4\u00e4 n\u00e4kem\u00e4mme tiedot.<\/p>\n<\/blockquote>\n<p>Ja sit\u00e4 haluan tarkastella t\u00e4n\u00e4\u00e4n, koska jos ei muuta, se antaa sinulle jotain k\u00e4yt\u00e4nn\u00f6llist\u00e4, josta voit ty\u00f6skennell\u00e4.<\/p>\n<h2>WordPressin virhelokien ymm\u00e4rt\u00e4minen, osa 1<\/h2>\n<p>Ennen kuin menen liian pitk\u00e4lle t\u00e4h\u00e4n, haluan k\u00e4sitell\u00e4 yht\u00e4 kysymyst\u00e4, jonka sivuston j\u00e4sen on esitt\u00e4nyt.<\/p>\n<p>Nimitt\u00e4in minulta kysyttiin:<\/p>\n<blockquote>\n<p>Milloin aiomme tarkastella oliokeskeisi\u00e4 periaatteita?<\/p>\n<\/blockquote>\n<p>Vaikka olen k\u00e4sitellyt t\u00e4t\u00e4 hieman <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-fundamentals\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aiemmassa sarjassa<\/a><\/strong>, yrit\u00e4n k\u00e4sitell\u00e4 sit\u00e4 tarkemmin my\u00f6hemmin t\u00e4ss\u00e4 sarjassa.<\/p>\n<p>Aloitetaan kuitenkin virhelokien tarkasteleminen t\u00e4m\u00e4n j\u00e4lkeen.<\/p>\n<h3>Vakioiden m\u00e4\u00e4ritt\u00e4minen<\/h3>\n<p>Jos et ole m\u00e4\u00e4ritt\u00e4nyt vakioita <strong>wp-config.php-<\/strong> tiedostossasi, suosittelen, ett\u00e4 teet sen nyt, koska se antaa sinulle parhaan mahdollisen tarkkuuden tutkiessasi mahdollisia ongelmia.<\/p>\n<p>Jos et ole perill\u00e4, muista lukea <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/natiivit-wordpress-virheenkorjaustyoekalut-jotka-eivaet-vaadi-ide-tae\/\" title=\"t\u00e4m\u00e4 viesti\">t\u00e4m\u00e4 viesti<\/a><\/strong> (ja jos olet, varmista, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-11-wp-config-debug-full-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ett\u00e4 seuraavat vakiot<\/a><\/strong> on m\u00e4\u00e4ritetty asetustiedostossasi):<\/p>\n<pre><code>&lt;?php\ndefine( 'WP_DEBUG', true );\ndefine( 'WP_DEBUG_LOG', true );\ndefine( 'WP_DEBUG_DISPLAY', true );\n@ini_set( 'display_errors', 1 );\ndefine( 'SCRIPT_DEBUG', true );\ndefine( 'SAVEQUERIES', true );<\/code><\/pre>\n<p>Kun ne ovat paikoillaan, sinulla on kaikki mit\u00e4 tarvitset n\u00e4hd\u00e4ksesi tiedot n\u00e4yt\u00f6ll\u00e4, mutta my\u00f6s WordPressin luomassa virheenkorjauslokissa.<\/p>\n<h3>Miss\u00e4 loki on?<\/h3>\n<p>T\u00e4m\u00e4 voi vaihdella ymp\u00e4rist\u00f6si luonteesta riippuen; Kuitenkin useimmissa tapauksissa l\u00f6yd\u00e4t <strong>debug.log<\/strong> &#8211; osoitteen <strong>wp-sis\u00e4lt\u00f6hakemistosta, joka sijaitsee<\/strong> <strong>laajennusten<\/strong>, <strong>teemojen<\/strong> ja <strong>lataushakemistojen<\/strong> yl\u00e4puolella .<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e74910d3457.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e74910d3457.png\" alt=\"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 1\"><\/a><\/p>\n<p>Kuten yll\u00e4 olevan kuvakaappauksen esikatselusta n\u00e4et, virheenkorjaustiedostossani on paljon sis\u00e4lt\u00f6\u00e4. Tarkastellaan sit\u00e4 tarkemmin seuraavassa osiossa sek\u00e4 kuinka se ymm\u00e4rret\u00e4\u00e4n. Sill\u00e4 v\u00e4lin kuitenkin tarkista, onko t\u00e4m\u00e4 tiedosto edes olemassa. Jos on, voit menn\u00e4 eteenp\u00e4in ja tutkia tiedoston sis\u00e4lt\u00f6\u00e4. Ymm\u00e4rr\u00e4t tai et ymm\u00e4rr\u00e4 paljon tapahtuvasta, mutta tiedoston sis\u00e4lt\u00f6 tarkoittaa, ett\u00e4 jokin teemassa tai laajennuksessa laukaisee erilaisia <strong><a href=\"https:\/\/secure.php.net\/manual\/en\/function.error-reporting.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u200b\u200bPHP-varoituksia, -ilmoituksia ja -virheit\u00e4<\/a><\/strong>, joita WordPress ker\u00e4\u00e4 ja tallentaa lokitiedostoon.<\/p>\n<h3>Mit\u00e4 lokitiedosto edes tarkoittaa?<\/h3>\n<p>T\u00e4m\u00e4 ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 tarkoita, ett\u00e4 jokin olisi rikki, mutta se osoittaa, ett\u00e4 jokin ei toimi niin kuin sen pit\u00e4isi, sit\u00e4 ei havaita ja k\u00e4sitell\u00e4 oikein ohjelmatasolla tai se yksinkertaisesti tekee jotain, mit\u00e4 sen ei pit\u00e4isi tehd\u00e4.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e749148c865.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e749148c865.png\" alt=\"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 1\"><\/a><\/p>\n<p>Sen ei tarvitse n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4 (mutta se voi!).<\/p>\n<p>Kehitt\u00e4j\u00e4n\u00e4 meid\u00e4n tulee pyrki\u00e4 varmistamaan, ett\u00e4 koodimme ei luo mit\u00e4\u00e4n, mik\u00e4 kirjoitetaan virhelokiin.<\/p>\n<p>Yksi asia on tehd\u00e4 se kehitysty\u00f6ss\u00e4, koska voimme saada k\u00e4sityksen siit\u00e4, mit\u00e4 teemme ja miten WordPress toimii. Se on kuitenkin toinen asia, ett\u00e4 jokin, jonka julkaisemme tuotantotasolla, tuottaa t\u00e4llaisia \u200b\u200basioita.<\/p>\n<h3>Virhelokin lukeminen<\/h3>\n<p>Ilmeisesti virhelokin lukeminen on muutakin kuin sen avaamista. Monille ensivaikutelma on, ett\u00e4 se voi olla joukko ammattislangia. Min\u00e4kin ymm\u00e4rr\u00e4n sen. Mutta kun ymm\u00e4rr\u00e4t, mit\u00e4 se n\u00e4ytt\u00e4\u00e4 sinulle, on paljon helpompi ymm\u00e4rt\u00e4\u00e4.<\/p>\n<p>Katsotaanpa siis todella yksinkertaista esimerkki\u00e4. T\u00e4m\u00e4k\u00e4\u00e4n ei ole keksitty esimerkki. Itse asiassa t\u00e4m\u00e4 on per\u00e4isin laajennuksesta, jonka parissa ty\u00f6skentelin. Virheloki sis\u00e4lt\u00e4\u00e4 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-12-error-log-example-1-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavat tiedot<\/a><\/strong> :<\/p>\n<pre><code>[05-Jul-2018 19:43:53 UTC] PHP Fatal error:  Uncaught Error: Class 'EasyEmailExportAdminEmailExportSubmenu' not found in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php:37\n#8 \/U in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 37\n[05-Jul-2018 19:44:03 UTC] PHP Warning:  include_once(.\/src\/Admin\/EmailExportSubmenu.php): failed to open stream: No such file or directory in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25\n[05-Jul-2018 19:44:03 UTC] PHP Warning:  include_once(): Failed opening '.\/src\/Admin\/EmailExportSubmenu.php' for inclusion (include_path='.:\/usr\/local\/Cellar\/php\/7.2.5\/share\/php\/pear') in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25<\/code><\/pre>\n<p>Huomaa, ett\u00e4 yll\u00e4 olevassa sis\u00e4ll\u00f6ss\u00e4 on kolme rivi\u00e4. Paras tapa toimia virhelokeja luettaessa on aloittaa alhaalta ja siirty\u00e4 yl\u00f6sp\u00e4in. T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 suorituksen aikana suoritettavat asiat toimivat pinossa.<\/p>\n<h4>Lyhyt poikkeama pinoista<\/h4>\n<p>En mene k\u00e4sitteen tietojenk\u00e4sittelytieteen m\u00e4\u00e4ritelm\u00e4\u00e4n, mutta koodi suoritetaan ja toimii siten, ett\u00e4 funktioita esiintyy ja aivan kirjaimellisesti tietokoneen muistissa pinotaan p\u00e4\u00e4llekk\u00e4in.<\/p>\n<p>Siten viimeisin juokseva asia tulee aina olemaan ylh\u00e4\u00e4ll\u00e4, miss\u00e4 sen alkujuuri on alhaalla. Koska kirjoitamme koodia jo olemassa olevaan sovellukseen, se on WordPress; silloin koodimme on todenn\u00e4k\u00f6isesti aina yl\u00e4osassa.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e74918219d3.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163025-61e74918219d3.png\" alt=\"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 1\"><\/a><\/p>\n<p>WordPress-virhelokien ymm\u00e4rt\u00e4minen: Se ei ole t\u00e4llainen pino<\/p>\n<p>Ajatuksena on, ett\u00e4 koodi alkaa suorittaa WordPressiss\u00e4 ja etenee kohti tekem\u00e4\u00e4mme ty\u00f6t\u00e4. Kun tulee ilmoitus, varoitus tai virhe, se on yleens\u00e4 jotain koodissamme (vaikka WordPress ei ole vapautettu, niin yleens\u00e4).<\/p>\n<p>Joten kun luet virhelokia, luet pohjimmiltaan niin sanottua <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Stack_trace\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pinoj\u00e4ljityst\u00e4.<\/a><\/strong> Wikipediassa, kuten linkitetty, on melko syv\u00e4llinen m\u00e4\u00e4ritelm\u00e4 aiheesta, mutta ehk\u00e4 osuvin kohta t\u00e4h\u00e4n viestiin on seuraava:<\/p>\n<blockquote>\n<p>Ohjelmoijat k\u00e4ytt\u00e4v\u00e4t yleens\u00e4 pinoj\u00e4ljityst\u00e4 interaktiivisen ja post mortem -virheenkorjauksen aikana (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Debugging\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/en.wikipedia.org\/wiki\/Debugging<\/a>). Loppuk\u00e4ytt\u00e4j\u00e4t voivat n\u00e4hd\u00e4 pinon j\u00e4ljen osana <a href=\"https:\/\/en.wikipedia.org\/wiki\/Error_message\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">virheilmoitusta<\/a>, jonka k\u00e4ytt\u00e4j\u00e4 voi sitten ilmoittaa ohjelmoijalle.<\/p>\n<\/blockquote>\n<p>T\u00e4m\u00e4 sopii yhteen sen kanssa, mit\u00e4 olen edell\u00e4 hahmotellut, eik\u00f6 niin? Mutta tarpeeksi puhua siit\u00e4, mit\u00e4 pinoj\u00e4ljitys on (se tulee selvemm\u00e4ksi, kun p\u00e4\u00e4semme syvemm\u00e4lle virheenkorjaukseen), palataanpa nyt lokitiedoston lukemiseen sellaisena kuin se on.<\/p>\n<h3>Takaisin lokin lukemiseen<\/h3>\n<h4>Sis\u00e4lt\u00e4\u00e4 tiedostot<\/h4>\n<p>Katsotaanpa ensin alimmaista rivi\u00e4 yll\u00e4 olevassa sis\u00e4ll\u00f6ss\u00e4. Se sis\u00e4lt\u00e4\u00e4 seuraavat:<\/p>\n<pre><code>[05-Jul-2018 19:44:03 UTC] PHP Warning: include_once(): Failed opening '.\/src\/Admin\/EmailExportSubmenu.php' for inclusion (include_path='.:\/usr\/local\/Cellar\/php\/7.2.5\/share\/php\/pear') in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25<\/code><\/pre>\n<p>T\u00e4m\u00e4 kertoo minulle, ett\u00e4 tiedostoni <strong>easy-email-export.php<\/strong> rivill\u00e4 25 se ei onnistunut avaamaan tiedostoa sis\u00e4llytett\u00e4v\u00e4ksi. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 koodissa on <strong>include_once<\/strong> -lauseke, joka viittaa <strong>osoitteeseen .\/src\/Admin\/EmailExportSubmenu.php<\/strong>, jota se ei l\u00f6yd\u00e4.<\/p>\n<p>Joten paras tapa toimia olisi etsi\u00e4 rivi 25 ja selvitt\u00e4\u00e4, miksi se ei l\u00f6yd\u00e4 tiedostoa. Ehk\u00e4 se kaataa koko polun siihen, mihin se n\u00e4ytt\u00e4\u00e4. P\u00e4\u00e4semme t\u00e4h\u00e4n hetkeksi, kun puhumme virhelokiin kirjoittamisesta.<\/p>\n<h4>Virheiden j\u00e4rke\u00e4<\/h4>\n<p>Seuraavalla rivill\u00e4 (eli juuri tarkastelemamme rivin yl\u00e4puolella) on seuraava:<\/p>\n<pre><code>[05-Jul-2018 19:44:03 UTC] PHP Warning: include_once(.\/src\/Admin\/EmailExportSubmenu.php): failed to open stream: No such file or directory in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 25<\/code><\/pre>\n<p>T\u00e4m\u00e4 erityinen rivi eroaa vain hieman, mutta se antaa lis\u00e4tietoa, ja se sis\u00e4ltyy lausekkeeseen, joka kuuluu &quot;Ei t\u00e4llaista tiedostoa tai hakemistoa&quot;. T\u00e4m\u00e4 on oivaltava, koska se kirjaimellisesti kertoo meille, ett\u00e4 tiedostoa ei ole olemassa.<\/p>\n<p>Sit\u00e4 ei ainakaan ole olemassa sielt\u00e4, miss\u00e4 se katsoo. Joten kaksi mahdollisuutta ovat:<\/p>\n<ol>\n<li>emme ole luoneet tiedostoa, johon olemme viittauksia,<\/li>\n<li>viittaamme tiedoston sijaintiin v\u00e4\u00e4r\u00e4ss\u00e4 paikassa<\/li>\n<\/ol>\n<p>Siksi meid\u00e4n on ensin tarkistettava, onko tiedosto olemassa paikassa, jota yrit\u00e4mme sis\u00e4llytt\u00e4\u00e4. Jos ei, meid\u00e4n pit\u00e4isi luoda tiedosto.<\/p>\n<p>Jos tiedosto on olemassa, tied\u00e4mme, ett\u00e4 laajennus yritt\u00e4\u00e4 ladata sen v\u00e4\u00e4r\u00e4st\u00e4 polusta. Joten meid\u00e4n on ehk\u00e4 tarkasteltava <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nimitilat-ja-automaattinen-lataus-wordpressissae\/\" title=\"automaattista latausohjelmaamme\">automaattista latausohjelmaamme<\/a><\/strong>, sis\u00e4llytt\u00e4mispolkuamme tai sit\u00e4, miten tiedostoja haetaan. Koska todenn\u00e4k\u00f6isyys on, ett\u00e4 jos tiedosto on olemassa, sit\u00e4 yritet\u00e4\u00e4n ladata paikasta, jossa se ei ole.<\/p>\n<h3>Tavoittamaton virhe<\/h3>\n<p>Koodin viimeisell\u00e4 rivill\u00e4 n\u00e4et jotain t\u00e4llaista:<\/p>\n<pre><code>[05-Jul-2018 19:43:53 UTC] PHP Fatal error: Uncaught Error: Class 'EasyEmailExportAdminEmailExportSubmenu' not found in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php:37\n#8 \/U in \/Users\/tommcfarlin\/Dropbox\/Projects\/trunk\/wp-content\/plugins\/easy-email-export\/easy-email-export.php on line 37<\/code><\/pre>\n<p>T\u00e4m\u00e4 on hyv\u00e4 esimerkki ensinn\u00e4kin, koska se ilmoittaa nimenomaisesti, ett\u00e4 t\u00e4m\u00e4 on huomaamaton virhe. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 toiminnallisuudesta riippumatta jokin aiheuttaa virheen, eik\u00e4 sit\u00e4 saada kiinni.<\/p>\n<ul>\n<li>t\u00e4m\u00e4 voi olla poikkeus,<\/li>\n<li>t\u00e4m\u00e4 voi olla ongelma yritett\u00e4ess\u00e4 kutsua funktiota, jota ei ole olemassa,<\/li>\n<li>t\u00e4m\u00e4 voi toimia muuttujalla, jota ei ole m\u00e4\u00e4ritelty,<\/li>\n<li>ja niin edelleen.<\/li>\n<\/ul>\n<p>Loppujen lopuksi siell\u00e4 voi olla monia ongelmia. Hyv\u00e4 uutinen t\u00e4ss\u00e4 esimerkiss\u00e4 on, ett\u00e4 se on k\u00e4yt\u00e4nn\u00f6ss\u00e4 sama kuin yll\u00e4 oleva: Tiedostoa ei l\u00f6ydy.<\/p>\n<p>Paitsi, sen sijaan, ett\u00e4 PHP antaisi varoituksen, se kielt\u00e4\u00e4 meid\u00e4t, t\u00e4m\u00e4 on kohtalokas virhe, eik\u00e4 ohjelma voi jatkaa suoritusta ennen kuin t\u00e4m\u00e4 koodirivi on ratkaistu. Ennen kuin hylk\u00e4\u00e4mme t\u00e4m\u00e4n jonakin, joka on sama kuin edellinen osio (koska tietyll\u00e4 tavalla se on), meid\u00e4n on ymm\u00e4rrett\u00e4v\u00e4, ett\u00e4 t\u00e4m\u00e4 on nimenomaisesti ilmoitettu kohtalokkaaksi virheeksi, kun taas edellisess\u00e4 esimerkiss\u00e4 sit\u00e4 k\u00e4siteltiin Varoitus.<\/p>\n<p>On olemassa erilaisia \u200b\u200b\u200b\u200btapoja k\u00e4sitteellist\u00e4\u00e4 t\u00e4m\u00e4, mutta tapa, jolla ajattelen sit\u00e4 yleens\u00e4 seuraavasti:<\/p>\n<ul>\n<li>Ilmoitus kertoo, ett\u00e4 jotain on pieless\u00e4 koodissa, mutta se ei ole tarpeeksi huono oikeuttaakseen suorittamisen keskeytt\u00e4misen.<\/li>\n<li>Varoitus on hieman vakavampi, koska se tarkoittaa, ett\u00e4 jokin on vaarassa ep\u00e4onnistua.<\/li>\n<li>Virheilmoitus sanoo &quot;t\u00e4m\u00e4 ei toimi, eik\u00e4 ohjelma voi jatkaa&quot;.<\/li>\n<\/ul>\n<p>Nyt tied\u00e4mme, ett\u00e4 ongelma on niin sanotusti pys\u00e4ytt\u00e4m\u00e4t\u00f6n, ja tied\u00e4mme, mik\u00e4 ongelma on. Yksinkertaisesti sanottuna tiedostoa, joka tarvitaan ohjelman suorittamiseen loppuun, ei l\u00f6ydy, joten ohjelma lakkaa toimimasta.<\/p>\n<p>Se on varmasti kohtalokas virhe.<\/p>\n<h3>Mik\u00e4 on Ratkaisu?<\/h3>\n<p>Se, mit\u00e4 tarjoan ratkaisuksi ongelmaani, ei ole ohjeellinen sen suhteen, mik\u00e4 toimii sinulle. Minulle se oli kysymys rivist\u00e4 Composer-kokoonpanossani, jolloin Composerin automaattinen latausohjelma ei l\u00f6yt\u00e4nyt tiedostoa oikeasta sijainnista (mutta t\u00e4m\u00e4 liittyy enemm\u00e4n tiedostojen j\u00e4rjest\u00e4miseen, nimiv\u00e4liin ja niin edelleen).<\/p>\n<p>Sinulle se voi olla jotain muuta.<\/p>\n<ul>\n<li>ehk\u00e4 se etsii tiedostoa v\u00e4\u00e4r\u00e4st\u00e4 hakemistosta,<\/li>\n<li>ehk\u00e4 tiedoston nimi on jokin muu kuin koodissa m\u00e4\u00e4ritetty,<\/li>\n<li>tai ehk\u00e4 se on jotain muuta.<\/li>\n<\/ul>\n<p>Joka tapauksessa asia on, ett\u00e4 sinun on ty\u00f6skennelt\u00e4v\u00e4 lokitiedoston l\u00e4pi alhaalta yl\u00f6s, jotta voit diagnosoida ongelman ja j\u00e4ljitt\u00e4\u00e4, mit\u00e4 PHP, WordPress ja ty\u00f6si tekev\u00e4t, ja sitten diagnosoida se sielt\u00e4.<\/p>\n<h2>Kirjoitetaan virhelokiin<\/h2>\n<p>Seuraavassa viestiss\u00e4 katsomme, kuinka voimme kirjoittaa virhelokiin. Joskus tiedoston lukeminen on hienoa, ja yksinkertaisesti liikkuminen n\u00e4kem\u00e4mme v\u00e4lill\u00e4 ja ongelmien ratkaiseminen on mukavaa.<\/p>\n<p>Mutta ent\u00e4 tilanne, jossa haluamme j\u00e4tt\u00e4\u00e4 jotain pois saadaksemme k\u00e4sityksen siit\u00e4, mit\u00e4 WordPress tai PHP n\u00e4kee? Siit\u00e4 on my\u00f6s hy\u00f6ty\u00e4.<\/p>\n<p>Joten t\u00e4m\u00e4n WordPress-virhelokien ymm\u00e4rt\u00e4mist\u00e4 k\u00e4sittelev\u00e4n sarjan seuraavassa osassa teemme juuri niin.<\/p>\n<h3>Mit\u00e4 sen j\u00e4lkeen?<\/h3>\n<p>Seuraavaksi tarkastelemme, kuinka k\u00e4ytt\u00e4\u00e4 joitain aiemmin hahmoteltuja laajennuksia koodin testaamiseen ja my\u00f6s koodimme profilointiin varmistaaksemme, ett\u00e4 olemme tehneet kaikkemme varmistaaksemme, ett\u00e4 tuotamme laatutasoa.<\/p>\n<p>T\u00e4m\u00e4 ei tarkoita, ett\u00e4 olisimme t\u00e4ysin valmiit virheenkorjausprosessin kanssa, mutta olemme ehdottomasti askeleen l\u00e4hemp\u00e4n\u00e4 ja pystymme kirjoittamaan koodia laadukkaalla tavalla, joka ei johda tiedostoon, joka edustaa erilaisia \u200b\u200bvivahteita. olimme liian huolimattomia korjataksemme (puhumattakaan ymm\u00e4rt\u00e4misest\u00e4).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jos haluat aloittaa koodin virheenkorjauksen ilman kolmannen osapuolen ty\u00f6kaluja, katso mit\u00e4 PHP ja WordPress luovat ja ymm\u00e4rr\u00e4t WordPress-virhelokeja.<\/p>\n","protected":false},"author":1,"featured_media":163026,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,843,864],"tags":[1166],"class_list":["post-230774","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230774","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230774"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230774\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/163026"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}