Košarica (0)
  • Vaša košarica je trenutno prazna

NEOSERV BLOG

Novice in nasveti iz sveta domen, gostovanja, SSL certifikatov, spletnih strani, spletnih trgovin in ostalih področij spleta.

Veliko spletnih aplikacij, na katerih so postavljene spletne strani in spletne trgovine, temelji na programskem jeziku PHP. Mednje sodijo tudi najbolj popularne, kot so WordPress, Joomla, Magento, PrestaShop, OpenCart in podobne. Če se ukvarjate s spletnim programiranjem ali skrbite za delovanje spletnega mesta, zagotovo veste, da se med izvajanjem PHP aplikacij lahko pojavljajo tudi napake.

PHP napake, do katerih prihaja med izvedbo programske kode, so za delovanje spletne strani lahko bolj ali manj usodne. Povzročijo lahko popolno nedelovanje strani, spletno stran lahko upočasnijo, vplivajo lahko na (ne)delovanje le dela strani ali pa na samo delovanje niti nimajo vpliva.

Razumevanje PHP napak je za razvijalce, ki poskušajo odpraviti nepravilnost med uporabo aplikacije, bistvenega pomena. Na tem mestu pride še kako prav PHP dnevnik napak (ang. PHP error log) – datoteka, ki skrbi za beleženje napak na spletnem mestu in sporoča, katere vrstice v kodi povzročajo težave.

Kazalo

Kako aktivirati prikazovanje in logiranje PHP napak?

Prikazovanje in logiranje PHP napak uredite v nadzorni plošči cPanel.

1. Vpišite se v nadzorno ploščo cPanel (navodila za vpis).

2. Poiščite razdelek SOFTWARE in kliknite na Izberi PHP Verzijo (ang. Select PHP Version).

cPanel - Izberi PHP Verzijo

3. Na vrhu izberite zavihek Options.

cPanel - PHP nastavitve

4. Dodajte kljukico pri nastavitvi display_errors. S tem boste aktivirali funkcijo, da se v primeru PHP napake na spletni strani le-ta izpiše obiskovalcu (npr. namesto bele/prazne strani).

Aktivacija prikazovanja PHP napak v cPanel

5. Pri nastavitvi error_reporting izberite E_ALL (lahko tudi E_ALL & ~E_NOTICE).

Aktivacija logiranja PHP napak v cPanel

Z izbrano vrednostjo E_ALL boste dosegli, da se beležijo tako PHP napake kot opozorila. Pri nastavitvi error_reporting lahko izberete tudi vrednost E_ALL & ~E_NOTICE, s katero bo sistem beležil le PHP napake, opozoril pa ne.

Kje se beležijo PHP napake?

Zdaj se bodo vse nove PHP napake (in opozorila) beležile v datoteke error_log. Omenjene datoteke se ustvarijo v tistih mapah, kjer so locirane .php datoteke, v katerih prihaja do napak. Večkrat boste datoteko error_log našli tudi v korenski mapi vaše domene, saj se zahtevki pogosto vršijo prek datoteke index.php.

Do datoteke error_log dostopate po naslednjem postopku:

1. V nadzorni plošči cPanel poiščite razdelek ikon FILES in kliknite na File Manager.

cPanel - File Manager

2. Če želite preveriti seznam PHP napak za nosilno domeno paketa gostovanja, preverite mapo public_html. Sicer pa poiščite mapo domene, za katero želite pridobiti informacijo o PHP napakah.

3. Z desnim miškinim gumbom kliknite na datoteko error_log in izberite View.

Ogled datoteke error_log

4. Prikazala se vam bo vsebina datoteke error_log. Primer si lahko ogledate na spodnji sliki.

Vsebina datoteke error_log

Kot vidite, so v datoteki zapisane poti do datotek, v katerih so se pojavljale PHP napake. Zabeleženi so tudi časi, kdaj je do posameznih napak prišlo.

Preverite lahko tudi zapis Apache napak, ki sicer v poštev pride zelo redko. Do omenjenega zapisa napak dostopate prek nadzorne plošče cPanel. Poiščite sekcijo ikon METRICS in izberite Errors. Prikazal se vam bo vmesnik, v katerem je zabeleženih do 300 najnovejših vnosov.

Kaj pomenijo posamezne PHP napake?

Glede pomena posameznih PHP napak se obrnite na programerja oziroma izdelovalca spletne strani, saj bo ta najbolje vedel, kaj določena PHP napaka pomeni.

Spodaj navajamo tri primere PHP napak:

  • PHP Parse error:  syntax error, unexpected ‘2’ (T_LNUMBER), expecting ‘)’ in /home/uporabnik/public_html/wp-config.php on line 34 pomeni, da je napaka povezana z zapisom kode. Preverite datoteko wp-config.php in v omenjeni vrstici (34) popravite kodo.
  • PHP Fatal error: Call to undefined function get_header() in /home/uporabnik/public_html/wp-content/themes/theme/index.php on line 5 sporoča, da index.php poskuša klicati funkcijo, ki ne obstaja. Preverite torej, ali je ime funkcije pravilno.
  • Fatal error: Maximum execution time of 30 seconds exceeded in /home/uporabnik/public_html/wp-includes/class-phpmailer.php on line 533 kaže na to, da je najdaljši čas izvedbe (30 sekund) potekel. Težava bi bila morda lahko odpravljena s spremembo vrednosti max_execution_time v PHP nastavitvah ali datoteki .htaccess.

Kako v aplikacijah aktivirati »Debug Mode«?

V nadaljevanju si bomo pogledali, kako aktivirati način za odpravljanje napak (ang. Debug Mode) v različnih aplikacijah: WordPress, Magento, OpenCart in PrestaShop.

1. WordPress

Se vam na WordPress spletni strani pojavljajo napake? Da boste hitreje ugotovili, kaj konkretno je narobe, omogočite funkcijo za odpravljanje napak. S tem bodo PHP napake vidne na tistih mestih spletne strani, kjer se sicer pojavljajo.

1. V nadzorni plošči cPanel odprite Upravitelja datotek (ang. File Manager) in se pomaknite v mapo, kjer so shranjene datoteke vašega WordPress spletišča.

2. Z desnim gumbom na miški kliknite na datoteko wp-config.php in izberite možnost Edit. Če se vam odpre pojavno okno, še enkrat kliknite na Edit v desnem spodnjem kotu.

File Manager - Uredi wp-config.php

3. V datoteki wp-config.php poiščite vrstico z zapisom:

define( 'WP_DEBUG', false );

Namesto vrednosti false uporabite true, da bo vrstica izgledala takole:

define( 'WP_DEBUG', true );

Aktivacija načina za odpravljanje napak (WordPress)

4. Če želite, da bodo napake prikazane neposredno na vaši spletni strani, hkrati pa bi jih zabeležili tudi v datoteko debug.log (nahaja se v mapi wp-content), dopišite še naslednjih nekaj vrstic:

define( 'WP_DEBUG_LOG', true ); // Log errors to debug.log
define( 'WP_DEBUG_DISPLAY', true ); // Display errors on website

define( 'WPS_DEBUG', true ); // 
define( 'WPS_DEBUG_SCRIPTS', true ); // Use non-minified scripts
define( 'WPS_DEBUG_STYLES', true ); // Use non-minified styles

Beleženje PHP napak v debug.log (WordPress)

5. Shranite spremembo s klikom na gumb Save Changes v desnem zgornjem kotu.

Ko boste PHP napake odpravili, ne pozabiti datoteke wp-config.php povrniti v prvotno stanje.

Pri odkrivanju PHP napak na WordPress spletni strani si lahko pomagate tudi z namenskim vtičnikom. Eden izmed njih je npr. WP Debugging, s katerim lahko z le nekaj kliki dosežete podobno, kot smo opisali v zgornjem postopku, kjer smo urejali datoteko wp-config.php.

2. Magento

Za odpravljanje PHP napak v Magento 2 obstaja kar nekaj možnosti. Vedeti morate, da platforma za postavitev spletne trgovine ponuja tri razvojne načine:

  • privzeti način (ang. Default Mode),
  • način za razvijalce (ang. Developer Mode),
  • produkcijski način (ang. Production Mode).

Prikaz napak v načinu za razvijalce

Smiselno je uporabiti način za razvijalce, ki omogoča prikaz PHP napak neposredno na spletni strani. Gre tudi za priročen način za odpravljanje napak poškodovanih modulov, ki na zaslonu prikažejo prazno stran ali napako 500.

Da vključite način za razvijalce, vzpostavite SSH povezavo s strežnikom in v krovni mapi spletne trgovine poženite naslednji CLI ukaz:

php bin/magento deploy:mode:set developer

Prikaz napak v produkcijskem načinu

Če želite napake prikazovati v produkcijskem načinu, kar pomeni, da jih lahko vidijo tudi obiskovalci, pa sledite naslednjemu postopku. Odprite datoteko $Magento2Root/app/bootstrap.php in odstranite komentar (#) pri vrstici:

ini_set('display_errors', 1);

S tem bodo PHP napake, do katerih bo prišlo med nalaganjem Magento trgovine, prikazane v brskalniku.

Prikaz napak v datoteki var/reports

Ko pride do napake, Magento le-to zapiše v datoteko var/reports, vendar je privzeto ne prikaže na zaslonu. Za namen odpravljanja napak privzeto nastavitev lahko spremenite, in sicer tako, da datoteko local.xml.sample (v mapi: $Magento2Root/pub/errors/) preimenujete v local.xml.

Datoteka vsebuje nastavitve za prikazovanje napak. Omogoča vam, da določite e-poštni naslov, na katerega boste obveščeni o novih PHP napakah.

Template Path Hints

Template Path Hints je v spletno trgovino vgrajeno diagnostično orodje, ki doda notacijo s potjo na vsaki grafični predlogi Magento platforme. Orodje lahko vključite tako za prednjo stran spletne trgovine kot za administracijo.

1. V administraciji se pomaknite na STORES in izberite Configuration.

Magento - STORES - Configuration

2. Na levi strani (pod sekcijo ADVANCED), kliknite na Developer.

Magento - STORES - Configuration - ADVANCED - Developer

3. V desnem meniju razširite Debug in vključite funkcije Template Path Hints for Storefront, Enabled Template Path Hints for Admin in Add Block Names to Hints.

Magento - Template Path Hints

4. Shranite nastavitve in takoj boste opazili spremembe; posamezne poti bodo označene z rdečimi okvirčki.

3. OpenCart

Prikazovanje in logiranje PHP napak za OpenCart lahko uredite kar v sami adminsitraciji spletne trgovine.

1. Po vpisu v administracijo v levem meniju kliknite na System in izberite Settings.

OpenCart - System - Settings

2. Na seznamu trgovin kliknite na modro ikono Edit, ki jo najdete povsem na desni strani.

OpenCart - System - Settings - Edit

3. Izberite zavihek Server in nato na dnu nastavitev poiščite sekcijo Error Handling.

OpenCart - Error Handling

4. Izberite želene nastavitve:

  • Display Errors – vrednost Yes pomeni, da bodo PHP napake prikazane neposredno na spletni trgovini.
  • Log Errors – vrednost Yes pomeni, da se bodo PHP napake beležile v datoteko, katere ime je določeno eno vrstice nižje (privzeto: error.log). Datoteka se shrani v krovno mapo spletne trgovine.

Če boste vključili nastavitev Display Errors, bodo napake vidne tudi obiskovalcem vaše spletne trgovine. Zato, ko z diagnosticiranjem in odpravo PHP napak končate, ne pozabite nastavitve spremeniti nazaj na No.

4. PrestaShop

Če uporabljate PrestaShop 1.7, lahko prikazovanje PHP napak vključite kar v administraciji spletne trgovine. V kolikor pa uporabljate starejšo verzijo, morate spremeniti nastavitev v eni izmed konfiguracijskih datotek. Pa si poglejmo, kakšen je postopek za novejšo in kakšen za starejšo verzijo spletne trgovine.

Prikazovanje napak v PrestaShop 1.7

1. Po vpisu v PrestaShop administracijo se pomaknite v Advanced Parameters in izberite Performance.

PrestaShop - Advanced Parameters - Performance

2. Poiščite sekcijo Debug mode in nato pri istoimenski nastavitvi (Debug mode) izberite vrednost Yes.

PrestaShop - Debug mode

S tem je način za prikazovanje PHP napak že vključen, zato lahko preverite svojo spletno trgovino in pričnete z odpravljanjem napak. Ko boste končali, nastavitev v Debug mode povrnite na No, saj bodo sicer morebitne napake vidne tudi vsem obiskovalcem.

Prikazovanje napak v PrestaShop 1.5 – 1.6

1. V nadzorni plošči cPanel odprite Upravitelja datotek (ang. File Manager) in se pomaknite v mapo, kjer so shranjene datoteke vaše PrestaShop trgovine.

2. Odprite mapo config ter poiščite datoteko defines.inc.php – nanjo kliknite z desnim klikom in izberite Edit.

File Manager - Edit defines.inc.php

3. Poiščite naslednjo vrstico:

define('_PS_MODE_DEV_', false);

in vrednost false zamenjajte s true:

define('_PS_MODE_DEV_', true);

Aktivacija načina za odpravljanje napak (PrestaShop)

4. Shranite spremembe s klikom na modri gumb SAVE CHANGES v desnem zgornjem kotu.

Zdaj lahko obiščete strani s težavami in prikazala se vam bodo sporočila o napakah. Seveda tudi v tem primeru, ko končate z odpravljanjem napak, omenjeno vrednost spremenite nazaj na false.

5. PHP aplikacija po meri

Med izvajanjem PHP aplikacije lahko pride do različnih napak. Za razvijalce, ki poskušajo odpraviti težave z nedelujočo aplikacijo, je pomembno, da te napake vidijo. V nadaljevanju preverite, kako PHP napake in opozorila prikazati v PHP aplikaciji po meri.

Hitra rešitev: prikaz vseh PHP napak

Če želite prikazati vse PHP napake in opozorila, boste to najhitreje dosegli z vnosom treh vrstic v PHP kodo aplikacije:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Razlaga zgornje kode:

  • Funkcija ini_set poskuša prepisati konfiguracijo, ki se nahaja v PHP ini datoteki.
  • Direktiva display_errors določa, ali bodo napake prikazane uporabniku ali bodo ostale skrite.
  • Direktiva display_startup_errors se uporablja za iskanje napak, do katerih pride med PHP zagonskim zaporedjem (direktiva display_errors tovrstnih napak ne obravnava).
  • Izvorna funkcija PHP error_reporting se uporablja za poročanje o vseh vrstah napak v skripti PHP. Kot argument v funkciji se uporabi konstanta E_ALL.

Na žalost direktivi display_errors in display_startup_errors ne prikažeta napak pri razčlenjevanju (eng. parse errors), kot so manjkajoča podpičja in zaviti oklepaji. Če želite doseči to, boste morali prilagoditi konfiguracijo PHP ini.

Konfiguracija PHP.ini za prikaz vseh napak in opozoril

Če dodajanje zgornjih funkcij in direktiv ne prikaže vseh napak, ima konfiguracija PHP ini na voljo nekaj dodatnih direktiv:

display_errors = on

Direktivo display_errors lahko nastavite na on v datoteki PHP.ini. To bo prikazalo vse napake, vključno z napakami v sintaksi in razčlenjevanju, ki zgolj s klicem funkcije ini_set v kodi PHP sicer niso prikazane.

Datoteko PHP.ini najdete z uporabo funkcije phpinfo():

<?php
phpinfo();
?>

Naložena konfiguracijska datoteka vsebuje podatek o lokaciji datoteke PHP.ini.

PHP funkcija error_reporting()

Funkcija poročanja o napakah je v PHP vgrajena funkcija, ki razvijalcem omogoča določiti, katere in koliko napak je prikazanih v aplikaciji. Funkcija nastavi direktivo error_reporting v konfiguraciji PHP ini med izvajanjem.

error_reporting(0);

Funkciji error_reporting je treba posredovati vrednost 0, da se odstranijo vse napake, opozorila, sporočila o razčlenjevanju in obvestila.

error_reporting(E_NOTICE);

V PHP je dovoljeno uporabljati spremenljivke, četudi niso deklarirane. To ni najboljša praksa, saj neprijavljene spremenljivke povzročajo težave, če se uporabljajo v zankah in pogojih. Nedeklarirane spremenljivke so prikazane v spletni aplikaciji, ko je E_NOTICE posredovan v funkciji error_reporting.

error_reporting(E_ALL & ~E_NOTICE);

Funkcija error_reporting razvijalcem omogoča, da izberejo, katere PHP napake so lahko prikazane. Znak ~ pomeni »ne«, zato parameter ~E_NOTICE pomeni, da se obvestila ne prikazujejo. Znak & pomeni “velja za vse“.

error_reporting(E_ALL);
error_reporting(-1);
ini_set('error_reporting', E_ALL);

Zgornje tri vrstice kode prav tako prikažejo vse PHP napake. Najpogosteje je uporabljen izraz error_reporting(E_ALL), saj je bolje berljiv.

Prikaz PHP napak prek konfiguracije .htaccess

Za omogočanje ali onemogočanje direktive za prikaz PHP napak lahko uporabite tudi datoteko .htaccess.

php_flag display_startup_errors on
php_flag display_errors on

Direktivo display_errors bo morda treba konfigurirati v .htaccess ali PHP.ini, odvisno od tega, katere datoteke so dostopne in kako je urejena konfiguracija strežnika. Mnogi ponudniki gostovanja ne dovolijo sprememb datoteke PHP.ini.

Za hitro osvežitev znanja …

V tokratni objavi ste spoznali, kje oz. kako v nadzorni plošči cPanel aktivirati prikazovanje in logiranje PHP napak. To je namreč prvi korak, če želite diagnosticirati napako, ki se pojavlja na vaši spletni strani.

Poleg tega ste spoznali, kje se PHP napake beležijo. V tem delu smo omenili datoteko error_log, ki se nahaja v krovni mapi spletne strani, pri kateri se pojavljajo napake. Na kratko smo predstavili tudi tri primere, kaj posamezne PHP napake pomenijo.

V zadnjem delu članka pa ste izvedeli, kako vključiti “Debug Mode” v nekaterih popularnih spletnih platformah. Konkretneje, opisali smo postopke za WordPress, Magento, OpenCart in PrestaShop. Sledila je še podrobna razlaga, kako prikazovanje PHP napak in opozoril vključiti v primeru PHP aplikacije po meri.

KOMENTARJI

KOMENTIRAJTE OBJAVO

(obvezno)
(obvezno, e-poštni naslov bo skrit)
(neobvezno)
Varnostno vprašanje, ki potrdi, da ste resnična oseba.