PHP "Maximum execution time exceeded" Hatası VDS'de Tüm Paneller İçin Nasıl Çözülür?

PHP ile geliştirdiğiniz bir uygulamada "Fatal error: Maximum execution time of 30 seconds exceeded" gibi bir hata alıyorsanız, yalnız değilsiniz. Bu hata, betiğinizin belirlenen süreyi aştığında ortaya çıkar ve genellikle uzun süren sorgular, büyük dosya işlemleri veya döngü sorunlarından kaynaklanır. VDS sahibiyseniz, bu hatayı kalıcı olarak çözmek için birkaç farklı yönteminiz var. Üstelik çözümler tüm kontrol panelleri (cPanel, Plesk, DirectAdmin) için benzer adımları içerir.

Maximum execution time nedir ve neden alınır?

PHP, her betiğin çalışması için bir süre sınırı belirler. Varsayılan 30 saniyedir. Eğer betiğiniz bu sürede tamamlanmazsa, sunucu çalışmayı durdurur ve yukarıdaki hatayı fırlatır. Bu durum genellikle yoğun veritabanı sorguları, harici API çağrıları, büyük dosyaların yüklenmesi veya optimize edilmemiş kodlardan kaynaklanır. VDS sahibi olarak bu süreyi artırabilir veya betiğinizi optimize edebilirsiniz.

Hatanın VDS üzerinde çözümü (tüm paneller için geçerli)

Aşağıdaki yöntemlerin hepsi VDS sunucunuzda root veya sudo yetkisi gerektirir. Hangi paneli kullanırsanız kullanın, temel mantık aynıdır: PHP yapılandırma dosyasını (php.ini) düzenlemek veya panel arayüzü üzerinden ayarları değiştirmek.

PHP.ini dosyasından düzenleme

En doğrudan yöntem php.ini dosyasını bulup max_execution_time değerini artırmaktır. Php.ini genellikle şu yollardan birinde bulunur:

  • /etc/php.ini
  • /etc/php/7.x/cli/php.ini (sürüme göre)
  • /etc/php/7.x/apache2/php.ini (Apache ile)
  • /etc/php/7.x/fpm/php.ini (Nginx/FPM ile)

Dosyayı açın (örneğin nano /etc/php.ini) ve aşağıdaki satırı arayın:

max_execution_time = 30

Bunu ihtiyacınıza göre değiştirin, örneğin 300 saniye (5 dakika) yapabilirsiniz. Kaydedip çıktıktan sonra web sunucunuzu yeniden başlatmayı unutmayın:

  • Apache için: systemctl restart apache2 veya service httpd restart
  • Nginx için: systemctl restart nginx ve systemctl restart php7.x-fpm

.htaccess dosyası ile çözüm

Eğer php.ini'ye erişiminiz yoksa veya yalnızca belirli bir dizin için süreyi artırmak istiyorsanız, .htaccess dosyasını kullanabilirsiniz. Ana dizininizdeki (genellikle public_html) .htaccess dosyasına aşağıdaki satırı ekleyin:

php_value max_execution_time 300

Bu yöntem, Apache üzerinde çalışır ve AllowOverride ayarının etkin olduğundan emin olmanız gerekir. Değişiklikten sonra sayfayı yenilemeniz yeterlidir.

Panel üzerinden ayarlar (cPanel, Plesk, DirectAdmin)

Popüler kontrol panelleri de bu ayarı değiştirmenize olanak tanır:

  • cPanel: "Select PHP Version" > "Switch to PHP Options" > "max_execution_time" değerini güncelleyin.
  • Plesk: "Tools & Settings" > "PHP Settings" > ilgili domain için "max_execution_time" düzenleyin.
  • DirectAdmin: "Custom HTTPD Config" > "PHP Config" > "max_execution_time" değiştirin.

Her panelde ayar kaydedildikten sonra web sunucusu otomatik olarak yeniden yüklenir.

Hangi değeri vermelisiniz?

Genellikle 300 saniye (5 dakika) çoğu işlem için yeterlidir. Ancak çok büyük dosyalar yüklüyorsanız 600 veya 900 saniyeye çıkabilirsiniz. Aşırı yüksek değerler (3600+ gibi) sunucu kaynaklarını gereksiz tüketir; bu nedenle betiklerinizi optimize etmek her zaman daha iyidir.

Alternatif yöntem: Kod içinde ini_set()

Yalnızca belirli bir betik için süreyi artırmak istiyorsanız, betiğin başında ini_set('max_execution_time', 300); komutunu kullanabilirsiniz. Bu yöntem, diğer ayarları etkilemez ve en esnek çözümdür.

Son olarak, değişikliklerinizi test ettiğinizden ve hata loglarını kontrol ettiğinizden emin olun. Eğer hata devam ediyorsa, betiğinizin kodunda bir döngü veya sonsuz işlem olup olmadığını inceleyin. Unutmayın: süreyi artırmak geçici bir çözümdür; kalıcı çözüm kodunuzu optimize etmektir.

← Tüm yazılar