Ugrás a tartalomra
Fejezetek

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-content mappa debug.log fá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.