Max execution time (Maksimum çalışma süresi aşıldı)

“Maximum execution time of X seconds exceeded” hatası, PHP’nin bir isteğe izin verdiği maksimum süreyi aştığın anlamına gelir. WordPress’te bu genelde büyük görsel işleme, import/export, yedekleme, tarama, ağır raporlama veya çok büyük sayfaların render edilmesi sırasında çıkar. Yılların kuralı: önce neden bu kadar uzun sürdüğünü anlarsın, sonra süreyi artırırsın. Süreyi sonsuza çekmek ustalık değil, risktir.

PHP tarafında max_execution_time değerini artırmak en klasik çözümdür. php.ini veya panelden ayarlanır.

; php.ini
max_execution_time = 300
max_input_time = 300
memory_limit = 256M

Apache bazı ortamlarda .htaccess ile de set edilebilir.

# .htaccess
php_value max_execution_time 300
php_value max_input_time 300

WordPress tarafında, özellikle admin işlemleri için WP_MAX_MEMORY_LIMIT ve WP_MEMORY_LIMIT artırmak da gerekir. Çünkü işlem uzadıkça bellek de artar; tek başına süreyi artırıp belleği düşük bırakırsan bu sefer memory hatasıyla düşersin.

// wp-config.php
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');

Koddaki bir işlem için geçici olarak süreyi artırman gerekiyorsa set_time_limit kullanılabilir. Fakat bazı hostlar bunu engeller. Ayrıca “her yerde set_time_limit” yazmak iyi alışkanlık değildir; sadece gerçekten uzun süren kontrollü işlemlerde kullanılır.

// uzun işlem öncesi
if (function_exists('set_time_limit')) {
    @set_time_limit(300);
}

Daha doğru mühendislik yaklaşımı, uzun işi tek istekte yapmak yerine parçalamaktır. WordPress dünyasında bu, WP-Cron ile job parçalamak, Action Scheduler kullanan eklentilerle arka plan kuyruğuna atmak veya AJAX ile batch işlemek şeklinde yapılır. Bu sayede kullanıcı isteği timeout’a düşmez. Geleneksel bakış açısıyla söyleyeyim: sunucuyu “tek seferde yüklenip bayıltmak” yerine işi parça parça yapmak her zaman daha temizdir.

Database tarafı da unutulmamalı. Bazı işlemler uzun sürer çünkü sorgular indekssizdir. Özellikle wp_postmeta şiştiyse, arama/filtreleme eklentileri meta query ile boğar. Burada çözüm indeks, cache ve gereksiz meta verisini azaltmaktır. Aynı şekilde dış servis çağrısı (API) bekliyorsa timeout olur; wp_remote_get timeout ayarı düşükse veya servis yavaşsa sorun yaşarsın. Bu durumda kodda timeout değerini ayarlamak gerekir.

$response = wp_remote_get('https://example.com/api', [
    'timeout' => 20,
]);

Max execution time hatası gördüğünde sadece süreyi büyütüp geçersen bir gün 504/502 olarak geri döner. Sağlam çözüm performansı düzeltmek, işi bölmek ve kaynakları dengeli ayarlamaktır. Bu, yıllardır değişmeyen, “eski okul” en doğru yoldur.

Hızlı İletişim Formu

Sorun, teklif ya da net bir soru… kısa yazın, biz dönüş yapalım.