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.