"Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)" mesajı, çalışan PHP betiğinin kendisine izin verilen bellek miktarını aştığını gösterir. Mesajdaki ilk sayı bayt cinsinden sınırdır: 134217728 bayt 128 MB eder. İkinci sayı, sınır aşıldığı anda ayrılmaya çalışılan ek bellek miktarıdır.

Bu sınırı PHP'nin memory_limit ayarı belirler; WordPress kullanıyorsanız buna ek olarak WP_MEMORY_LIMIT ve WP_MAX_MEMORY_LIMIT sabitleri devreye girer. Aşağıda sınırın nereden geldiğini, cPanel, php.ini, .user.ini ve .htaccess ile nasıl artırılacağını ve sınırı artırmanın neden her zaman doğru çözüm olmadığını anlatıyoruz.

memory_limit nedir, varsayılan değeri nedir?

memory_limit nedir, varsayılan değeri nedir?

PHP kılavuzuna göre memory_limit, bir betiğin ayırabileceği en fazla bellek miktarını bayt olarak belirler ve kötü yazılmış betiklerin sunucudaki belleği tüketmesini önler. Varsayılan değer 128M, değiştirilebilirlik türü INI_ALL'dur; yani php.ini, dizin bazlı yapılandırma ve çalışma anında ini_set() ile değiştirilebilir. Sınırı tamamen kaldırmak için -1 kullanılır, ancak bu canlı sunucuda önerilmez. Değerlerde K, M ve G kısaltmaları kullanılabilir.

Hosting firmaları bu değeri farklı ayarlayabilir; sizin sunucunuzdaki gerçek değeri aşağıdaki yöntemlerle kontrol edin.

Ziyaretçiyseniz

Bu hata sitenin sunucusunda oluşur ve sizin cihazınızla ilgisi yoktur. Sayfayı daha sonra tekrar deneyin veya site sahibine hata mesajını ve saatini iletin. WordPress sitelerinde aynı hata genellikle "Sitenizde ciddi bir sorun çıktı" ekranı olarak görünür.

WordPress bellek sabitleri: WP_MEMORY_LIMIT ve WP_MAX_MEMORY_LIMIT

WordPress bellek sabitleri: WP_MEMORY_LIMIT ve WP_MAX_MEMORY_LIMIT: WP_MEMORY_LIMIT, WP_MAX_MEMORY_LIMIT

WordPress, PHP'nin sınırını kendi sabitleriyle yükseltmeye çalışır. Kaynak koddaki (default-constants.php) varsayılanlar şöyledir:

SabitVarsayılanNerede kullanılır
WP_MEMORY_LIMITTek site: 40M, multisite: 64MSitenin genel (ön yüz) istekleri
WP_MAX_MEMORY_LIMIT256M (PHP sınırı zaten 256M üstündeyse veya -1 ise o değer)Yönetim alanı ve görsel işleme gibi ağır işlemler

Önemli ayrıntı: WordPress memory_limit değerini yalnızca kendi değeri PHP'ninkinden büyükse yükseltir; PHP sınırını hiçbir zaman düşürmez. Yani PHP sınırı 128M ise ve WP_MEMORY_LIMIT 40M ise site 128M ile çalışır. Hosting firması memory_limit değerinin değiştirilmesini engellediyse WordPress sabitleri işe yaramaz.

Bu adımda wp-config.php, .htaccess veya veritabanı üzerinde değişiklik yapacaksanız önce yedek alın. Dosyayı kendi bilgisayarınıza indirmek ya da cPanel Dosya Yöneticisi ile bir kopyasını oluşturmak yeterlidir; veritabanı için phpMyAdmin dışa aktarma veya panelinizin yedek aracını kullanın.

php
// wp-config.php: "That's all, stop editing!" satırından önce
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

WordPress belgeleri bu sabitlerin wp-settings.php dahil edilmeden önce tanımlanması gerektiğini belirtir; bu yüzden dosyanın alt kısmındaki "stop editing" satırının üstüne yazın.

Mevcut sınırı nasıl görürsünüz?

  • WordPress Site Sağlığı: Araçlar > Site Sağlığı > Bilgi sekmesinde Server bölümü PHP bellek sınırı gibi sunucu değerlerini, WordPress Constants bölümü de WP_MEMORY_LIMIT ve WP_MAX_MEMORY_LIMIT değerlerini gösterir. Bu ekran yalnızca bilgi verir, ayar değiştirmez.
  • cPanel MultiPHP INI Editor: Basic Mode ekranında seçtiğiniz konum için geçerli değerleri görürsünüz.
  • phpinfo(): geçici bir dosyayla PHP'nin gerçekte kullandığı değeri ve hangi php.ini dosyasının yüklendiğini görebilirsiniz.
php
<?php
// bilgi.php: kontrol ettikten sonra hemen silin
phpinfo();

phpinfo çıktısında memory_limit satırında iki sütun vardır: Local Value o dizinde geçerli olan değerdir, Master Value ana php.ini değeridir.

Sınırı artırma yolları

Sınırı artırma yolları: cPanel'de Software bölümündeki MultiPHP INI Editor arayüzünü açın., Basic Mode, memory_limit değerini örneğin 256M yapın ve Apply düğmesine basın.

1. cPanel MultiPHP INI Editor (en kolay yol)

  • cPanel'de Software bölümündeki MultiPHP INI Editor arayüzünü açın.
  • Basic Mode sekmesinde konum menüsünden Home Directory (tüm siteler) veya ilgili alan adını seçin.
  • memory_limit değerini örneğin 256M yapın ve Apply düğmesine basın.

cPanel belgelerine göre bu arayüz ayarı, desteklediği ölçüde php.ini, .user.ini ve .htaccess dosyalarına yazar ve bu üç dosya birbirinin aynısı olmayabilir. Sunucuda LSAPI kullanılıyorsa .htaccess dosyasına LSAPI için ayrı bir bölüm eklenir. Görünen değerler PHP sürümüne göre değişir. Arayüzün size açık olup olmadığını barındırma firmanız belirler.

2. php.ini veya .user.ini

Kendi sunucunuzu yönetiyorsanız ana php.ini dosyasını düzenleyip PHP servisini (örneğin PHP-FPM) yeniden başlatın. Paylaşımlı hostingde ise dizin bazlı .user.ini dosyası kullanılır. PHP kılavuzuna göre .user.ini dosyaları yalnızca CGI/FastCGI SAPI (PHP-FPM bunu kapsar) tarafından okunur; PHP, istenen betiğin klasöründen başlayarak belge köküne kadar bu dosyayı arar. Dosyalar varsayılan olarak 300 saniyede bir (user_ini.cache_ttl) yeniden okunur, bu yüzden değişikliğin etkisi beş dakikayı bulabilir.

ini
; public_html/.user.ini
memory_limit = 256M

3. .htaccess içinde php_value (yalnızca belirli kurulumlarda)

PHP kılavuzu php_value yönergesinin PHP Apache modülü (mod_php) olarak çalışırken Apache yapılandırmasında ve .htaccess dosyasında kullanılabildiğini, bunun için "AllowOverride Options" veya "AllowOverride All" yetkisi gerektiğini belirtir. PHP-FPM veya başka bir FastCGI kurulumunda bu yönerge PHP'ye ulaşmaz; Apache tanımadığı yönerge yüzünden 500 hatası verebilir. Böyle sunucularda .user.ini kullanın. LiteSpeed Web Server ise kendi PHP işleyicisiyle .htaccess içindeki php_value satırlarını işleyebilir ve yönetici bunu DisablePhpOverride ile kapatabilir. cPanel belgeleri PHP 8.0 ve sonrasında DSO (mod_php) işleyicisinin desteklenmediğini de not eder.

apache
# .htaccess (yalnızca mod_php veya LiteSpeed PHP için)
php_value memory_limit 256M

Hangi PHP işleyicisini kullandığınızı bilmiyorsanız phpinfo çıktısındaki Server API satırına bakın veya barındırma firmanıza sorun. Apache ve .htaccess ayrıntıları için .htaccess rehberimize, PHP-FPM havuz ayarları için PHP-FPM yapılandırma yazımıza bakabilirsiniz.

Hata logunu okumak ve suçluyu bulmak

Hata mesajı genellikle sınırın aşıldığı dosyayı ve satırı da gösterir. Bu dosya her zaman belleği tüketen asıl kod olmayabilir, ama güçlü bir ipucudur. WordPress'te WP_DEBUG_LOG ile wp-content/debug.log dosyasına kayıt alabilirsiniz; ayrıntılar için WordPress kritik hata rehberimize bakın.

text
PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 65536 bytes)
  in /home/kullanici/public_html/wp-content/plugins/eklenti-adi/inc/rapor.php on line 118
NedenBelirtiÇözüm
Sınır gerçekten düşükSınır 64M veya 128M; büyük bir tema veya sayfa oluşturucu kullanılıyormemory_limit ve WP_MEMORY_LIMIT değerini makul ölçüde artırın (örneğin 256M)
Bellek sızdıran veya çok sorgu yapan eklentiSınırı artırsanız da hata yine gelir; hep aynı eklenti dosyası görünürEklentiyi güncelleyin, devre dışı bırakıp test edin, alternatife geçin
Büyük görsel işlemeGörsel yüklerken veya küçük resim oluşturulurken hataGörseli yüklemeden önce küçültün; WP_MAX_MEMORY_LIMIT değerini kontrol edin
Ağır içe aktarma veya yedeklemeYalnızca içe aktarma, yedek veya rapor sırasındaİşlemi parçalara bölün, WP-CLI veya sunucu tarafı araç kullanın
Ayar uygulanmıyorphpinfo Local Value eski değeri gösteriyorDoğru dosyayı (php.ini, .user.ini, .htaccess) ve PHP işleyicisini kontrol edin

Sınırı artırmak neden her zaman çözüm değildir?

Sınırı 256M'den 1G'ye çıkarmak hatayı bir süre ortadan kaldırabilir; ancak sorun bir döngüye giren, her istekte binlerce kaydı belleğe yükleyen veya belleği serbest bırakmayan bir eklentiyse sorunu yalnızca erteler ve gizler. Her PHP süreci daha çok bellek kullanabildiği için aynı anda daha az isteğe yanıt verilebilir, bu da siteyi yavaşlatır veya sunucunun başka bir sınırına takılmasına neden olur.

Sık Sorulan Sorular

WP_MEMORY_LIMIT ekledim ama değer değişmedi. Neden?

WordPress yalnızca PHP'nin memory_limit değerini değiştirmesine izin veriliyorsa ve kendi değeri daha büyükse sınırı yükseltir. Hosting firması değiştirmeyi kapattıysa sabit etkisiz kalır; bu durumda cPanel MultiPHP INI Editor kullanın veya firmanıza başvurun. Satırın "stop editing" yorumundan önce olduğundan da emin olun.

memory_limit değerini -1 yapmak güvenli mi?

PHP kılavuzu -1 değerinin sınırı kaldırdığını belirtir. Canlı sitede bu, hatalı bir betiğin sunucudaki belleği tüketmesine izin verir. Sınırsız yerine somut bir değer kullanın.

Hata yalnızca yönetim panelinde çıkıyor. Hangi değeri artırmalıyım?

Yönetim alanında WordPress WP_MAX_MEMORY_LIMIT değerini kullanır; varsayılanı 256M'dir. Hata buradaysa bu sabiti kontrol edin, ancak PHP'nin memory_limit değerini yükseltmesine izin verildiğinden emin olun.

Değişiklik ne zaman etkili olur?

php.ini değişikliği PHP servisi (örneğin PHP-FPM) yeniden başlatılınca, .htaccess değişikliği hemen, .user.ini değişikliği ise varsayılan olarak beş dakikaya kadar etkili olur.

Yazılım, tarayıcı ve hizmet adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen şirketlerle ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: WordPress kritik hata çözümü · upload_max_filesize hatası · PHP-FPM yapılandırma · PHP nedir? · wp-config.php sabitleri · 500 Internal Server Error