Hibaelhárítás
PHP-hibák értelmezése
A PHP hibatípusai (szintaktikai, végzetes, figyelmeztetés, értesítés, elavult, helyreállítható), példákkal és a hibaszintek jelentésével.
A PHP az a programnyelv, amelyen a WordPress és a WooCommerce fut. A webszerveren dolgozik: ő dolgozza fel az űrlapokat, kezeli a munkameneteket és kommunikál az adatbázissal. Ez a fejezet segít megérteni a hibaüzeneteket. A leírt eljárások haladó hibaelhárítást jelentenek, ha nem érzed biztosnak magad bennük, kérj segítséget egy WordPress- vagy WooCommerce-fejlesztőtől.
Hol találod meg a PHP-hibákat?
- Hibanaplók a tárhelyen. A tárhely vezérlőpultján a „naplók” vagy „hibanaplók” résznél találod.
- WordPress-hibakeresés. A WordPress beépített hibakereső módja a hibákat kiírja az oldalra, és a
wp-contentmappadebug.logfájljába is naplózza. Élő webhelyen használat után kapcsold ki, hogy ne kerüljenek ki érzékeny adatok. - WooCommerce állapotnaplók. A WooCommerce → Állapot → Naplók oldalon.
A PHP hibatípusai
| Típus | Mit jelent | Megállítja a futást? |
|---|---|---|
| Szintaktikai hiba (parse error) | Elírás a kódban, például hiányzó pontosvessző vagy zárójel. | Igen, a szkript el sem indul. |
| Végzetes hiba (fatal error) | A PHP érti a kérést, de nem tudja végrehajtani, például nem létező függvényt vagy osztályt hívsz. | Igen. |
| Figyelmeztetés (warning) | Valami nincs rendben, például hiányzó fájlt akarsz beilleszteni. | Nem. |
| Értesítés (notice) | Enyhébb jelzés, például nem létező változó vagy tömbelem használata. | Nem. |
| Elavult (deprecated) | Olyan kódot használsz, amelyet a későbbi verziók már nem támogatnak. | Nem. |
| Helyreállítható hiba | Egy hiba, amelyet a kód elkap és kezel, így a futás folytatódik. | Nem, ha kezelik. |
Szintaktikai hiba
Ez például egy téma functions.php fájljában fordulhat elő, ha elveszik egy zárójel:
function modify_product_price_display() {
echo 'New price: ' . wc_get_price_to_display( $product;
}
A függvényhívásból hiányzik a záró zárójel. A helyes változat:
function modify_product_price_display() {
echo 'New price: ' . wc_get_price_to_display( $product );
}
A hiba megállítja a szkriptet, a webhely akár egyáltalán nem tölt be. A hibaüzenet megmutatja a hibás fájlt és sort.
Végzetes hiba
Okozhatja a téma, egy bővítmény, a szerverbeállítás és más is. Tipikus eset a nem létező függvény hívása:
function apply_special_discount() {
if ( is_user_logged_in() ) {
add_discount_to_cart(10);
}
}
add_action('woocommerce_before_cart', 'apply_special_discount');
Ha az add_discount_to_cart() függvényt sehol nem definiálták (sem a témában, sem bővítményben, sem a WooCommerce magjában), a PHP végzetes hibát jelez, és az oldal nem töltődik be. A hibaüzenet így kezdődik:
Fatal error: Uncaught Error: Call to undefined function add_discount_to_cart() in /path/to/your/site/wp-content/themes/your-theme/functions.php:5
Utána a hívási lánc (stack trace) következik, amely megmutatja, mely fájlokon és függvényeken át jutott el a futás a hibáig. A megoldás az, hogy csak létező, megfelelően definiált függvényeket használj.
Figyelmeztetés
Például egy nem létező fájl beillesztésekor:
include 'config/settings.php';
Ha a fájl nincs ott, a PHP figyelmeztet („failed to open stream: No such file or directory”), de a többi kód lefut. Ha a fájlra szükség van, egyes funkciók mégsem működnek majd. Javítsd az elérési utat, vagy pótold a fájlt.
Értesítés
Például egy be nem állított változó kiírásakor:
function show_discount_notice() {
global $product;
if ($product->is_on_sale()) {
echo 'Sale Price: ' . $sale_price;
}
}
Ha a $sale_price nincs beállítva, ezt kapod: Notice: Undefined variable: sale_price. A futás folytatódik, de a kimenet hibás lehet. Az érték helyes beállítása megszünteti az értesítést.
Elavult függvény
Ha egy régi, lecserélt függvényt használsz (például a woocommerce_get_product_terms helyett ma a wc_get_product_terms való), a PHP naplózza:
Deprecated: woocommerce_get_product_terms is deprecated since version 3.0! Use wc_get_product_terms instead.
A kód működik, de érdemes az újabb függvényre cserélni, hogy a későbbi verziókkal is együttműködjön.
Helyreállítható hiba
Ha például egy függvénynek rossz típusú értéket adsz át, és a hívást try/catch blokk veszi körül, a TypeError elkapható. A futás a hiba után is folytatódik, a hibát szépen kezelheted:
Error: Argument 2 passed to process_payment() must be of the type array, string given
A PHP hibaszintjei
A PHP a hibákat szintekbe sorolja. Ezeket a hibakereső beállításai és a naplók is használják:
| Szint | Jelentése |
|---|---|
E_ERROR |
Súlyos hiba, a program azonnal megáll. |
E_WARNING |
Hiba, ami nem állítja meg a programot, de javítani kell. |
E_PARSE |
A PHP egyáltalán nem érti a kódot. |
E_NOTICE |
Kisebb probléma, a program tovább fut. |
E_CORE_ERROR, E_CORE_WARNING |
Mint a végzetes hiba és a figyelmeztetés, de a PHP indulásakor. |
E_COMPILE_ERROR, E_COMPILE_WARNING |
A kód futás előtti előkészítésekor talált hibák és figyelmeztetések. |
E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE |
A programozó által szándékosan kiváltott hiba, figyelmeztetés és értesítés. |
E_STRICT |
Javaslat a kód jobbá és a jövőbeli PHP-verziókkal kompatibilissé tételére. |
E_RECOVERABLE_ERROR |
Súlyos, de a programon belül kezelhető hiba. |
E_DEPRECATED |
A PHP olyan részére figyelmeztet, amelyet később eltávolítanak. |
E_USER_DEPRECATED |
A programozó által adott figyelmeztetés elavult gyakorlatról. |
E_ALL |
Minden hiba és figyelmeztetés. |