# Szerver- és PHP-hibák

> Gyakori szerveroldali és PHP-s hibák (letiltott függvények, hiányzó adatbázis-jogosultság, üres admin, shortcode-ok) okai és megoldásai.

Az alábbi hibák többsége a tárhely beállításaiból ered. Ha nem vagy a szerver adminisztrátora, a javításhoz a tárhelyszolgáltatód segítsége kell.

## „[XYZ] has been disabled for security reasons”

Példák a hibaüzenetre:

```text
PHP Warning: loadClass() has been disabled for security reasons in /PATH_TO_WORDPRESS/wp-content/plugins/wordpress-seo-premium/vendor/composer/ClassLoader52.php on line 186

Warning: php_uname() has been disabled for security reasons in /www/wp-content/plugins/wordpress-seo-premium/vendor/yoast/wp-helpscout/src/class-helpscout-beacon-identifier.php on line 61
```

A tárhely beállításai nem engedik, hogy a szerver használja a hibaüzenetben megnevezett függvényt (`loadClass()`, `php_uname` vagy más).

**Megoldás:** kérd meg a tárhelyszolgáltatót vagy a szerver adminisztrátorát, hogy engedélyezze a függvényt. Ha nem tudják, érdemes másik tárhelyen gondolkodnod.

## A bővítmény nem tud adatbázistáblákat létrehozni

A működéshez a bővítménynek táblákat kell létrehoznia az adatbázisban. Ha ez automatikusan nem sikerül, hibaüzenetet kapsz.

Mielőtt bármit módosítasz, készíts biztonsági mentést az adatbázisról. Ha van lehetőséged, előbb próbáld ki a változtatást tesztoldalon (staging), hogy az éles oldal kiesése minél rövidebb legyen.

Nem neked kell megjavítanod: kérd meg a tárhelyszolgáltatót. A bővítménynek az adatbázis-felhasználón az alábbi jogosultságokra van szüksége: `ALTER`, `CREATE`, `DELETE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE` és `DROP`. Írhatsz neki például így:

> Szia! A Yoast SEO működéséhez új táblákat kell létrehoznia az adatbázisunkban. A bővítmény automatikusan megpróbálja ezeket létrehozni, de nem sikerült. Be tudnád állítani az adatbázis jogosultságait, hogy létre tudja hozni a táblákat? A bővítménynek ezek a jogosultságok kellenek: ALTER, CREATE, DELETE, INDEX, INSERT, SELECT, UPDATE és DROP. Köszönöm!

Ha a tárhelyszolgáltató nem hajlandó vagy nem tudja átállítani a jogosultságokat, az egyetlen tanács a tárhelyváltás.

## Üres admin oldalak

Ha az admin felület oldalai üresek (az oldal nem omlik össze, de a vezérlőpulton és más admin részeken nincs tartalom), a bővítmény a PHP `bccomp()` függvényét használja. Ez a BCMath PHP-könyvtár része, amely a PHP-val együtt jár, de nagyon kevés tárhelyen nincs beállítva. Ilyenkor az admin üres marad, amint a bővítmény eléri ezt a függvényt.

**Megoldás:** kérd meg a tárhelyszolgáltatót, hogy a szerver PHP-jét állítsák be a BCMath támogatással (a PHP fordításakor a `--enable-bcmath` kapcsolóval). Új csomagot nem kell telepíteniük, a beállítás azonnal megoldja a hibát.

## „You should add … to the httpd config file”

Ez a figyelmeztetés Apache szerveren jelenik meg, például:

```text
As you're on Apache, you should add the following include to the website httpd config file:
Include /Path_To_WordPress/wp-content/uploads/wpseo-redirects/.redirects
```

**Ok:** ha kikapcsolod a PHP-s átirányításokat, és külön átirányítási fájlt hozatsz létre, a bővítmény az összes átirányítást egy saját fájlba írja. A szerver viszont nem tudja, hogy ezt a fájlt használnia kell.

**Megoldás:** a figyelmeztetésben szereplő `Include` sor azt mondja meg a szervernek, hogy használja a fájlt. A `httpd.conf` szerkesztéséhez kérj útmutatást a tárhelyszolgáltatótól vagy a szerver adminisztrátorától. Biztonsági okokból a bővítmény nem tudja ellenőrizni a szerver teljes elérési útját, ezért a figyelmeztetés akkor is megmarad, ha a sort már hozzáadtad a `httpd.conf` fájlhoz.

## „Call to undefined function filter_input()”

```text
Fatal error: Call to undefined function filter_input() in /PATH_TO_WORDPRESS/wp-content/plugins/wordpress-seo-premium/PATH_TO_FILE.extension on line ###
```

A tárhelyen ki van kapcsolva a PHP szűrő (filter) kiterjesztése, amelyre a bővítmény támaszkodik. A legtöbb környezetben alapból be van kapcsolva, ezért általában nem szokott kikapcsolt lenni. Ha nem vagy a szerver adminisztrátora, magad nem tudod megoldani: kérd meg a tárhelyszolgáltatót, hogy engedélyezze a kiterjesztést.

## „Parse error: Unexpected T_FUNCTION”

```text
Parse error: syntax error, unexpected T_FUNCTION in /PATH_TO_WORDPRESS/wp-content/plugins/PATH_TO/file.php on line 41
```

Ez a hiba jellemzően akkor jelenik meg, ha a szerveren régi PHP fut, és a bővítmény bizonyos verziói nem működnek vele.

1. **Frissítsd a PHP-t.** A szerver PHP-verzióját egy phpinfo-fájllal vagy a tárhely ügyfélszolgálatán keresztül tudhatod meg. Ha a verzió régebbi a PHP 5.3-nál, frissíts a PHP egy aktuális verziójára, ez azonnal megoldja a hibát.
2. **Frissítsd a bővítményt** kézzel a legújabb verzióra. Ha már a legújabbat használod, és a hiba megmarad, jelezd a támogatásnak.

A frissítés menetét az **Első lépések** csoport frissítésről szóló fejezete írja le.

## Az SPL kiterjesztés nem elérhető

A Standard PHP Library (SPL) olyan interfészek és osztályok gyűjteménye, amelyek az objektumorientált PHP-programozás gyakori feladatait oldják meg: a `foreach` bejárás viselkedését, a tömbszerű hozzáférést, a fájl- és könyvtárkezelést, a SimpleXML-objektumok kezelését. Legnagyobb része az iterátorok.

A Yoast SEO (Premium) működéséhez az SPL-nek telepítve és aktívnak kell lennie a tárhelyen. Ha nincs, telepítéskor ezt az üzenetet látod:

> The Standard PHP Library (SPL) extension seem to be unavailable. Please ask your web host to enable it.

Kérd meg a tárhelyszolgáltatót, hogy telepítse vagy kapcsolja be az SPL-t. Ha nem tudják, váltsatok tárhelyet.

## A shortcode-ok nem jelennek meg

Ha a tartalomban a shortcode szövege látszik a kész oldalon, például:

```text
[wpseo_map id="all" width="400" height="300" zoom="-1" map_style="roadmap" show_route="0" show_state="0"]
```

akkor két ok lehet:

1. A shortcode-ot adó bővítmény nem aktív, ezért a shortcode nem működik.
2. A sablon (téma) úgy írja ki a tartalmat, hogy nem alkalmazza rá a szükséges szűrőket.

### A sablon javítása

1. Telepítsd a „What The File” bővítményt: megmutatja, a sablon melyik fájlja rendereli az érintett oldalt.
2. Nyisd meg azt a fájlt. Ha ilyen sort találsz benne, ott a hiba:

   ```php
   echo $post->post_content;
   ```

3. Írd át úgy, hogy a WordPress ciklusát és a `the_content();` függvényt használja a tartalom kiírásához.
4. Ha ez semmiképp nem megoldható, a sor helyettesíthető ezzel:

   ```php
   echo apply_filters( 'the_content', $post->post_content );
   ```

Ez utóbbi nem az ajánlott megoldás, mert más tartalmat is érinthet.
