“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.