Hogyan lehet megoldani a PHP végzetes hiba: A megengedett 8388608 bájt memória mérete kimerült
A PHP kódolók egyik leggyakoribb és leginkább frusztráló hibája a következő: "Halálos hiba: A 8388608 bájt kimerült ... memória mérete ...", majd valami olyasmi, mint "(próbálta kiosztani a XXXX bájtokat) a /home/www/file.module on line 12. "Ez a halálos PHP hiba felbukkan, mert alapértelmezés szerint a PHP memóriahasználati korlátja 8 MB minden egyes scripthez. Ez egy jó dolog, valójában, mert nem akarsz egy rosszindulatú PHP szkriptet, hogy lefuttassa a kiszolgálót az összes memória lepakolásával. De néha olyan PHP-szkriptet kap, amely általában meghaladja a 8 MB-os határértéket ( például importálás vagy feltöltés ). A "Halálos hiba: megengedett 8388608 byte-os memória mérete ..." hibaüzenet megkerüléséhez egyszerűen csak helyezze be ezt a kódsorot a parancsfájlba:
ini_set ("memory_limit", " 16M ");
Ez a memória korlátot 16 MB helyett 8 MB helyett. Ezzel a számmal meg lehet és kell csípni, hogy a lehető legkisebb legyen anélkül, hogy megismételné a hibaüzenetet. Ez csak az adott PHP-fájl memóriahatását módosítja.
Alternatívaként módosíthatja php.ini fájlját a memória korlát felállításához. Ez hatással lesz a kiszolgáló összes szkriptjére. Egyszerűen nyissa meg a php.ini fájlt, és keresse meg a "memory_limit" szót, és módosítsa azt:
memory_limit = 16M
A saját PHP.ini fájljában észrevettem, hogy az alapértelmezésem sokkal magasabb a 128M-nél. Tehát, ha ezt a hibaüzenetet kapnám, akkor olvastam: "Halálos hiba: A 134217728 bájt megengedett memória mérete kimerült ..." és nyilvánvalóan sokkal nagyobb probléma. De ugyanaz a megoldás, mint a "Halálos hiba: A 8388608 bájt megengedett memória mérete kimerült ..." vagy "Halálos hiba: A megengedett 16777216 byte-os memória mérete ..." vagy bármi más. Nyilvánvalóan a memory_limit alapértelmezett értéke a PHP 5.2.0-ban 8M-ról 16M-re nőtt, és jelenleg 128M a PHP 5.3.0-hoz, ami magyarázatot ad arra, hogy miért nem kapja meg ezt a hibaüzenetet.
A memória korlátját is letilthatja úgy, hogy a memória_limit értékét -1 értékre állítja a PHP.ini fájlban.
memory_limit = -1
Ez azonban általában nem jó ötlet, nyilvánvaló okokból.
Megjegyzés: A memory_limit vonalat a .htaccess oldalon is használhatja.
Most, emlékszem, ez csak egy megoldás. Tényleg, a PHP szkriptje nem haladhatja meg a 8 MB-ot, kivéve, ha feltöltési fájlokat vagy valami mást csinál, ami nyilvánvalóan sok memóriahasználatot igényel. Amit igazán meg kell tennie, megpróbálja kitalálni, hogy a forgatókönyve milyen sok memóriát használ, és megpróbálja kijavítani. Az egyik módja annak, hogy kitaláljuk, mekkora memóriát használ a PHP szkript, hogy a memory_get_usage () PHP függvényt használja. Egyszerűen ismételje meg a parancsfájl bármely pontján, hogy megtudja, merre van a memóriahasználat:
echo memory_get_usage ();
Ha ezt a hibaüzenet jelenik meg a Drupal vagy a Joomla webhelyen, akkor a valószínűsíthető bűnös új modul vagy csomag. Például a Drupal-ban az admin / modules oldal minden modulot betölt a Drupal telepítésébe, amely szőrös lehet, ha egy egyéni modul hibás, sérült vagy feltört. Próbáld meg egyenként letiltani a modulokat, hogy azonosítsd, mi okozza a párt leállását. Továbbá, egyes tárhelyszolgáltatók figyelmen kívül hagyják a PHP kód memória korlátainak módosítására irányuló kísérleteit, így szükség esetén kapcsolatba kell lépnie a tárhely támogatásával. Találtam néha, hogy módosítani kell a php.ini fájlt, és néha fel kell tennem a kódot a .htaccess fájlba. Akárhogy is, remélhetőleg ez az információ itt elég ahhoz, hogy útba jusson!