Sari la conținut
Configurare

Cum rezolvi eroarea "Allowed Memory Size Exhausted" în WordPress

Dacă site-ul tău afișează Fatal error: Allowed memory size of 268435456 bytes exhausted, adaugă această linie în wp-config.php deasupra comentariului / That's all, stop editing! /

Publicat

Dacă site-ul tău afișează Fatal error: Allowed memory size of 268435456 bytes exhausted, adaugă această linie în wp-config.php deasupra comentariului /* That's all, stop editing! */: define( 'WP_MEMORY_LIMIT', '256M' );. Asta repune online majoritatea site-urilor în mai puțin de un minut. Dar citește tot restul paginii înainte să pleci, pentru că ridicarea limitei este un diagnostic, nu un tratament. Dacă blocajul revine la o valoare mai mare, adevărata problemă e un cod care consumă memorie fără limită, iar un plafon mai mare doar îi dă mai multă frânghie.

Ce înseamnă de fapt eroarea

PHP ține evidența cantității de memorie alocate de fiecare cerere. Când o singură cerere încearcă să aloce peste memory_limit setat în php.ini (sau suprascris de WordPress), PHP oprește imediat cererea cu o eroare fatală și afișează numărul de bytes la care a murit. 268435456 bytes înseamnă 256M. 134217728 înseamnă 128M. 536870912 înseamnă 512M. Numărul de după „tried to allocate” îți spune mărimea ultimei picături care a umplut paharul, nu mărimea problemei.

WordPress adaugă propriile limite peste cele ale PHP. WP_MEMORY_LIMIT (implicit 40M, sau limita PHP dacă e mai mare) guvernează partea de front-end. WP_MAX_MEMORY_LIMIT (implicit 256M) guvernează operațiunile din zona de administrare, precum biblioteca media și actualizarea plugin-urilor, care au nevoie în mod legitim de mai mult. WordPress apelează ini_set('memory_limit', ...) la încărcare pe baza acestor constante — dar numai dacă hostingul tău permite ini_set și numai până la plafonul maxim impus de host. Ultima parte e motivul pentru care uneori editarea wp-config.php pare să nu aibă niciun efect.

Rezolvarea, pas cu pas

1. Ridică limita WordPress în wp-config.php. Ăsta e primul lucru de încercat, pentru că e reversibil și nu atinge nimic altceva.

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

Dacă nu ești sigur unde se pun aceste linii sau vrei să setezi corect și celelalte constante uzuale în același timp, generatorul nostru de wp-config scrie un bloc curat pe care îl poți lipi. Poziționarea contează — orice se află sub linia „stop editing” este ignorat.

2. Dacă asta nu schimbă nimic, hostingul tău limitează PHP. Ridică memory_limit la nivel de PHP. În php.ini:

memory_limit = 256M

Pe multe hostinguri partajate nu poți edita direct php.ini. Încearcă în schimb un fișier .user.ini în rădăcina web sau setează-l prin .htaccess pe o configurație Apache/mod_php:

php_value memory_limit 256M

Reține că php_value în .htaccess aruncă o eroare 500 pe nginx sau pe configurațiile PHP-FPM, pentru că este o directivă Apache/mod_php. Dacă primești un 500 după ce l-ai adăugat, ăsta e motivul — șterge-l și folosește .user.ini.

3. Confirmă valoarea care e efectiv activă. Nu te încrede în ce ai editat, ci în ce raportează PHP. Pune un fișier de o linie în rădăcina web:

<?php echo ini_get('memory_limit');

Încarcă-l în browser, citește valoarea, apoi șterge fișierul. Dacă tot afișează 128M după ce ai setat 256M, hostingul te suprascrie și trebuie să-l contactezi sau să folosești setarea din panoul lor de control.

Partea pe care majoritatea ghidurilor o sar

Ridicarea limitei este diagnostic. Iată cum să interpretezi rezultatul.

Dacă setezi 256M și site-ul rămâne funcțional la trafic normal, aveai un plafon legitim care era prea jos — ceva obișnuit pe site-urile cu biblioteci media mari, WooCommerce sau page builder-e. Ai terminat.

Dacă setezi 256M și se blochează din nou, apoi 512M și se blochează iar, oprește-te din a-l ridica. O cerere WordPress normală nu are nevoie de 512M. Când consumul de memorie urcă fără plafon, ceva se învârte în buclă sau se acumulează: un plugin care încarcă un întreg tabel din baza de date într-un array, un add_action care se declanșează recursiv pe sine, o rutină de import care ține toate rândurile în memorie deodată, sau două plugin-uri care se bat în interiorul aceluiași hook. Ridicarea limitei nu repară o buclă fără limită — doar mută blocajul cu câteva secunde mai târziu și îl face mai greu de reprodus.

Ca să găsești vinovatul, dezactivează toate plugin-urile și treci pe o temă implicită precum Twenty Twenty-Four. Dacă eroarea dispare, reactivează-le pe rând până revine. Activează jurnalul de debug ca să prinzi unde moare:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Linia fatală din wp-content/debug.log numește fișierul și numărul liniei care a alocat ultima porțiune de memorie. De obicei acolo e bucla, sau la un apel de funcție distanță de ea.

Ce să nu faci

Nu seta WP_MEMORY_LIMIT la -1 sau 1024M și să uiți de el. Memoria nelimitată nu repară o scurgere; permite unei cereri scăpate de sub control să mănânce tot serverul, ceea ce poate doborî toate celelalte site-uri de pe aceeași mașină și îți poate aduce un telefon de la host. Un plafon este o măsură de siguranță. Păstrează unul.

Nu lipi ini_set('memory_limit', '512M') în functions.php ca soluție principală. Rulează prea târziu pentru unele erori — dacă blocajul apare în timpul încărcării nucleului WordPress, înainte ca functions.php al temei tale să se execute, linia nu rulează niciodată. wp-config.php se încarcă mai devreme și este locul potrivit.

Nu presupune că e o problemă de hosting și să-ți upgradezi planul. Uneori chiar e un hosting subdimensionat. Adesea însă exact același blocaj te urmărește pe planul mai mare, pentru că sursa problemei a călătorit odată cu plugin-urile tale. Exclude mai întâi bucla; e gratis.

Nu ridica memory_limit ca să rezolvi o eroare de max_execution_time. Sunt limite diferite cu mesaje diferite. Epuizarea memoriei spune „Allowed memory size … exhausted.” Un timeout spune „Maximum execution time … exceeded.” Ridicarea celei greșite îți irosește o după-amiază.

Tot blocat?

Dacă ai confirmat că limita activă este cu adevărat 256M sau mai mult, ai testat cu toate plugin-urile dezactivate și cu o temă implicită, iar memoria tot se epuizează, atunci ai o scurgere reală de urmărit în jurnalul de debug, nu un plafon de ridicat. Capturează linia fatală, notează în directorul cărui plugin arată, iar ăla e raportul tău de bug. Setează mai întâi corect constantele de bază din wp-config.php cu generatorul de wp-config, ca să știi că limitele sunt setate acolo unde crezi — apoi mergi să citești jurnalul.