İçindekiler
- 1 PHP Ayarlarını Neden Ciddiye Almalısınız?
- 2 memory_limit Nedir, Kaç Olmalı?
- 3 max_execution_time Nedir, Kaç Olmalı?
- 4 upload_max_filesize ve post_max_size Nasıl Ayarlanmalı?
- 5 Paylaşımlı Hosting, VPS ve dedicated sunucuda PHP Limitleri
- 6 Bu Değerleri Nereden ve Nasıl Değiştirebilirsiniz?
- 7 Hata Mesajlarından Limit Problemlerini Okumak
- 8 DCHost Ekibi Olarak Önerdiğimiz Genel PHP Limit Rehberi
- 9 Sonuç ve Yol Haritası
PHP Ayarlarını Neden Ciddiye Almalısınız?
Bir web sitesi yayınlarken çoğu kişi tema, eklenti ve tasarıma odaklanıyor; PHP ayarları ise genelde sunucu tarafında bir yerde “varsayılan” bırakılıyor. Sonra yavaş yavaş tanıdık sorunlar başlıyor: Tam yüklenmeyen sayfalar, bitmeyen yedekleme işlemleri, yarıda kalan ithalatlar, beyaz ekran hataları, sebebi belirsiz 500 hataları… Bunların çok büyük bir kısmı yanlış veya yetersiz PHP limitlerinden kaynaklanıyor.
Özellikle üç ayar kritik: memory_limit, max_execution_time ve upload_max_filesize. Bu üç değer, sitenizin:
- Ne kadar RAM kullanabileceğini,
- Bir PHP betiğinin en fazla ne kadar süre çalışabileceğini,
- Panel üzerinden ne büyüklükte dosya yükleyebileceğinizi
doğrudan belirliyor. Yanlış ayarlandıklarında hem performans hem de stabilite bozuluyor; hatta tüm sunucuyu etkileyebilecek kadar büyük problemlere yol açabiliyorlar.
DCHost ekibi olarak günlük pratikte, özellikle WordPress, WooCommerce, LMS (Moodle vb.), kurumsal PHP uygulamaları ve SaaS projelerinde bu ayarların ne kadar belirleyici olduğunu görüyoruz. Bu rehberde, memory_limit, max_execution_time ve upload_max_filesize değerlerini site tipine ve altyapınıza göre nasıl seçmeniz gerektiğini, hangi senaryoda hangi aralıklara çıkmanın mantıklı olduğunu ve bu değerleri nereden, nasıl değiştireceğinizi detaylı şekilde anlatacağız.
Amacımız; “hepsini 1 GB yap, bitsin” gibi riskli yaklaşımlar yerine, kontrollü, test edilebilir ve sürdürülebilir bir yol haritası sunmak. Böylece hem sitenizin performansı artacak hem de gereksiz kaynak tüketimi ve güvenlik risklerinden kaçınmış olacaksınız.
memory_limit Nedir, Kaç Olmalı?
memory_limit Tam Olarak Neyi Sınırlar?
memory_limit, tek bir PHP sürecinin kullanabileceği maksimum RAM miktarını belirler. Yani:
- Her PHP isteği için ayrı ayrı uygulanır,
- WordPress veya Laravel gibi uygulamalar, ağır bir sorgu çalıştırdığında ya da büyük bir veri yapısını hafızaya aldığında bu limite çarpar,
- Limit aşıldığında “Allowed memory size of X bytes exhausted…” şeklinde bir fatal error alırsınız ve o anda çalışan PHP betiği durur.
Özetle: memory_limit çok düşükse betikleriniz sık sık patlar; çok yüksekse bir anda onlarca PHP süreci bellek tüketip tüm sunucuyu kilitleyebilir.
Farklı Site Tipleri İçin Önerilen memory_limit Değerleri
Buradaki değerler genel rehber niteliğindedir; altyapınızın (paylaşımlı hosting, VPS, dedicated), ziyaretçi trafiğinizin ve eklenti yoğunluğunuzun farklı olabileceğini unutmadan okuyun. DCHost tarafında çoğu senaryoda bu aralıklarla başlatıyoruz, sonra gerçek kullanım verisine göre ince ayar yapıyoruz.
- Basit kurumsal site / blog (WordPress, hazır PHP CMS): 128M – 256M
- Az sayıda eklenti, ağır sorgu yok, basit tema kullanıyorsanız 128M genelde yeterli olur.
- Page builder, çok eklenti, görsel optimizasyon, güvenlik eklentileri varsa 256M daha konforlu.
- Yoğun eklentili WordPress, içerik sitesi, küçük WooCommerce: 256M – 512M
- WooCommerce, form eklentileri, SEO araçları, cache ve güvenlik eklentileri birlikte kullanılıyorsa 256M artık alt sınır gibi düşünülmeli.
- Büyük ürün kataloğu, sık cron görevleri, raporlama gibi yükler varsa 512M mantıklı başlama noktasıdır.
- Orta–büyük WooCommerce, LMS (Moodle vb.) ve haber/marketplace projeleri: 512M – 768M
- On binlerce ürün, kullanıcı, içerik var; düzenli toplu ihracat/ithalat yapılıyor.
- Öğrenci sınavları, raporlar, yoğun sorgular memory kullanımını yukarı çeker.
- Özel PHP uygulamalar, raporlama ve batch iş yükleri: 768M – 1024M (1G)
- Büyük CSV/Excel işleyen, ağır rapor üreten, arka planda batch çalışan sistemler için daha yüksek limit gerekebilir.
- Burada mutlaka kod tarafında optimizasyon ve parçalara bölme stratejisi de olmalı.
Paylaşımlı hosting tarafında, memory_limit değeriniz üzerinde ek bir hesap başı RAM limiti de bulunur. Bu konuda cPanel’de kaynak limitleri ve Resource Limit Reached hatası yazımızı mutlaka incelemenizi öneririz.
memory_limit Çok Düşükse Ne Olur?
Pratikte şunları görürsünüz:
- WordPress yönetim panelinde tema/eklenti güncellerken yarıda kalan işlemler,
- Medya kütüphanesine görsel yüklerken beklenmedik beyaz ekran veya 500 hataları,
- WooCommerce ürün ithalatı sırasında Allowed memory size exhausted hataları,
- Yoğun SQL sorgularında hata verip yarım kalan sayfa yüklemeleri.
Özellikle WordPress beyaz ekran hatası rehberimizde anlattığımız tipik vakaların önemli bir kısmında kök neden, yetersiz memory_limit oluyor.
memory_limit Çok Yüksekse Ne Olur?
“Nasıl olsa RAM çok, 2G yapayım gitsin” yaklaşımı masum görünse de tehlikelidir:
- Her PHP süreci 1–2 GB kadar bellek kullanabiliyorsa,
- Aynı anda yük altında 20–30 istek oluştuğunda,
- Toplam RAM tüketimi bir anda 30–40 GB düzeylerine çıkabilir.
Sonuç:
- Sunucu geneli swap’e düşer,
- CPU ve disk IO tavan yapar,
- Hem sizin siteniz hem diğer siteler (paylaşımlıysa) ciddi şekilde yavaşlar veya hiç açılmaz.
Bu yüzden DCHost tarafında yaklaşımımız, “geliştikçe mantıklı şekilde artırmak” yönünde. Önce 256M/512M gibi değerlerle başlayıp gerçek kullanım verisine bakıyor, sonra gerekiyorsa kontrollü artış yapıyoruz.
max_execution_time Nedir, Kaç Olmalı?
PHP Çalışma Süresi Mantığı
max_execution_time, bir PHP betiğinin kaç saniye boyunca çalışmasına izin verileceğini belirler. Örneğin:
- Değer 30 ise, 31. saniyede PHP betiği Fatal error: Maximum execution time of 30 seconds exceeded hatasıyla durdurulur.
- Bu sınır, sonsuza kadar dönen betikleri engelleyerek hem güvenlik hem de kaynak kullanımı açısından koruma sağlar.
Buradaki kritik nokta şu: Her uzun süren işlem hatalı değildir. Özellikle ithalat, yedek alma, büyük rapor oluşturma gibi işler doğal olarak uzun sürebilir. Önemli olan, bu uzun işleri bilinçli şekilde yönetmek.
Site Tipine Göre max_execution_time Tavsiyeleri
Varsayılan değer birçok hosting ortamında 30 veya 60 saniyedir. Bu çoğu basit site için yeterli olsa da her senaryo için ideal değildir.
- Basit kurumsal site / blog: 30 – 60 sn
- Normal sayfa görüntülemeleri genelde 1–2 saniye sürer.
- Eklenti ve tema güncellemeleri için 60 saniye çoğu durumda yeterlidir.
- WordPress + WooCommerce (küçük/orta ölçek): 60 – 120 sn
- Ürün ithalatı, toplu kupon veya fiyat güncellemeleri gibi işlemler 30 saniyeyi aşabilir.
- Planlı cron görevleri (yedekleme, raporlama) için biraz esneklik sağlar.
- Büyük WooCommerce, LMS ve rapor ağırlıklı sistemler: 120 – 300 sn
- 10.000+ ürün, binlerce öğrenci veya kullanıcı olan yapılarda bazı batch işlerinin 2–3 dakikaya ihtiyacı olabilir.
- Bu tip süreçleri mümkünse CLI (komut satırı) üzerinden çalıştırmak daha sağlıklıdır; CLI için ayrı max_execution_time ayarı kullanılabilir.
Çok kritik bir not: max_execution_time’ı asla 0 yapıp “sınırsız” hale getirmeyin, özellikle paylaşımlı hostingde bu ciddi risk taşır. Hatalı yazılmış bir betik sonsuza kadar çalışıp CPU ve RAM’i tüketebilir.
Uzun Süren İşlemler İçin Doğru Strateji
Gerçek hayatta sık gördüğümüz bir durum: Kullanıcı 30 saniyelik max_execution_time ile, 15 dakikalık bir ithalatı yönetici panelinden çalıştırmaya çalışıyor. Doğal olarak işlem yarıda kalıyor. Burada doğru strateji:
- Uzun sürecek işlemleri, mümkünse komut satırından (php cli) yürütmek,
- İşleri küçük parçalara bölerek queue/cron yapılarına yaymak,
- Gerekirse belirli scriptler için lokal max_execution_time artırmak (genel tüm site için değil).
Daha gelişmiş PHP uygulamalarında (özellikle Laravel), uzun işleri kuyruk sistemlerine kaydırmak ve arka planda worker’larla çalıştırmak, hem kullanıcı deneyimini hem de sunucu stabilitesini ciddi şekilde iyileştirir.
upload_max_filesize ve post_max_size Nasıl Ayarlanmalı?
upload_max_filesize, post_max_size ve memory_limit İlişkisi
Dosya yükleme tarafında genelde üç ayar birlikte düşünülür:
- upload_max_filesize: Tek bir dosyanın maksimum boyutu.
- post_max_size: Bir POST isteğinde gönderilebilecek toplam veri boyutu (birden fazla dosya + form verisi dahil).
- memory_limit: Yüklenen dosyanın işlenmesi sırasında (özellikle resim yeniden boyutlama, PDF işleme vb.) kullanılabilecek RAM.
Genel kural:
- post_max_size >= upload_max_filesize olmalı,
- memory_limit ise, yapılan işleme göre dosya boyutundan çoğu zaman anlamlı şekilde daha büyük olmalı (özellikle resim işleme kütüphaneleri dosyanın birkaç katı RAM tüketebilir).
Gerçekçi Dosya Yükleme Senaryolarına Göre Değerler
- Sıradan blog / kurumsal site:
- upload_max_filesize: 8M – 32M
- post_max_size: 16M – 64M
- memory_limit: en az 128M
- WordPress + WooCommerce (orta ölçek):
- upload_max_filesize: 32M – 64M
- post_max_size: 64M – 128M
- memory_limit: 256M – 512M
- LMS ve ağır doküman yüklenen sistemler (PDF, video kapak görselleri vb.):
- upload_max_filesize: 64M – 256M (gereksinime göre)
- post_max_size: upload değerinin 1.5–2 katı
- memory_limit: 512M ve üzeri senaryolar mümkün
Çok büyük video dosyalarını (500 MB – 1 GB gibi) doğrudan PHP ile yönetici panelinden yüklemek genellikle iyi fikir değildir. Bu tip dosyaları genelde FTP/SFTP, object storage ya da özel upload servisleri ile yönetmek, hem performans hem de stabilite açısından daha doğru çözümdür.
Güvenlik ve Kötüye Kullanım Riskleri
upload_max_filesize ve post_max_size değerlerini çok yükseltmek:
- Yanlış yapılandırılmış sitelerde saldırganların çok büyük dosyalar yükleyerek disk doldurmasına zemin hazırlayabilir.
- WAF ve güvenlik tedbirleri zayıfsa, kötü amaçlı script veya zararlı içeriklerin sunucuya taşınmasını kolaylaştırır.
- Disk I/O ve yedekleme sürelerini olumsuz etkileyebilir.
Bu yüzden, gerçekten ihtiyaç duyduğunuz kadar yükseltmek ve mümkünse:
- Dosya uzantılarını filtrelemek,
- Uygulama tarafında MIME tipi kontrolleri yapmak,
- Güvenlik eklentileri ve WAF kullanmak
önemli.
Paylaşımlı Hosting, VPS ve dedicated sunucuda PHP Limitleri
Paylaşımlı Hostingde Sınırlar ve Tipik Değerler
Paylaşımlı hosting ortamında, aynı fiziksel sunucuyu birden fazla müşteri kullanır. Bu yüzden PHP limitleri hem sizin hem de diğer kullanıcıların performansını koruyacak şekilde sınırlandırılır. DCHost tarafında paylaşımlı hosting müşterilerimizin büyük kısmında şu aralıklara yakın değerler kullanıyoruz (paket seviyesine göre değişebilir):
- memory_limit: 256M – 512M
- max_execution_time: 60 – 120 sn
- upload_max_filesize: 32M – 64M
- post_max_size: 64M – 128M
Bu değerler, tipik WordPress/kurumsal site ve orta ölçekli WooCommerce projeleri için yeterli oluyor. Daha ağır iş yükleri için ise genelde müşteriyi VPS veya dedicated sunucuya yönlendiriyoruz. Bu geçişe dair pratik bir yol haritası arıyorsanız paylaşımlı hostingden VPS’e geçiş rehberimize göz atabilirsiniz.
DCHost VPS ve Dedicated Altyapısında Esnek Ayarlar
VPS veya dedicated sunucuda, PHP limitlerini çok daha esnek şekilde yönetebilirsiniz. Burada iki önemli nokta var:
- Limitleri yükseltirken toplam RAM, CPU ve eşzamanlı PHP süreci sayısını birlikte düşünmek gerekir.
- PHP-FPM havuz ayarları (pm.max_children vb.) ile memory_limit değerleri bir arada planlanmalıdır.
Örneğin 8 GB RAM’li bir VPS’te:
- PHP-FPM havuzunda 20–30 child süreç planlandıysa,
- memory_limit değerini 512M yaptığınızda,
- Teorik maksimum RAM kullanımı 10–15 GB seviyesine çıkabilir (diğer servisleri saymadan).
Bu yüzden DCHost’ta yüksek trafikli WordPress/Laravel sitelerinde, PHP limitlerini belirlerken mutlaka sunucu geneli kaynak planlaması yapıyoruz. Bu konunun devamı niteliğinde WordPress için sunucu tarafı optimizasyon rehberimizi de okumanız faydalı olacaktır.
Bu Değerleri Nereden ve Nasıl Değiştirebilirsiniz?
cPanel / DirectAdmin Üzerinden PHP Ayarları
DCHost paylaşımlı hosting ve bazı yönetilen VPS paketlerinde, kontrol paneli üzerinden PHP değerlerini değiştirebilirsiniz:
- cPanel:
- “Select PHP Version” veya “MultiPHP INI Editor” bölümüne girersiniz.
- memory_limit, max_execution_time, upload_max_filesize, post_max_size gibi değerleri arayüzden değiştirebilirsiniz.
- DirectAdmin:
- “PHP Settings” veya benzer isimli bölümde aynı ayarları düzenleyebilirsiniz.
Paylaşımlı hosting paketinizde bu değerlerin üst limitleri hosting sağlayıcınız tarafından belirlenir. Yani siz arayüzde maksimum 512M görebiliyorsanız, 1024M yazsanız bile daha yukarı çıkamayabilirsiniz.
php.ini, .htaccess ve .user.ini ile Manuel Ayar
VPS veya dedicated sunucuda (veya paylaşımlı ortamda izin veriliyorsa) ayarları direkt dosya düzeyinde de değiştirebilirsiniz:
- php.ini (global ayar):
memory_limit = 256M max_execution_time = 60 upload_max_filesize = 32M post_max_size = 64M - .htaccess (Apache, mod_php veya bazı FPM konfigürasyonlarında):
php_value memory_limit 256M php_value max_execution_time 60 php_value upload_max_filesize 32M php_value post_max_size 64M - .user.ini (PHP-FPM + CGI yapılandırmalarında sıkça kullanılır):
memory_limit = 256M max_execution_time = 60 upload_max_filesize = 32M post_max_size = 64M
Değişikliklerden sonra mutlaka:
- PHP-FPM servisini yeniden başlatmayı,
- Gerekirse web sunucusunu (Nginx/Apache) yeniden yüklemeyi,
- phpinfo() veya bir test betiği ile yeni değerleri doğrulamayı
unutmayın.
Doğru Yapılandırma İçin Pratik Bir Kontrol Listesi
Yeni bir PHP projesini DCHost altyapısına taşırken genelde aşağıdaki adımları uyguluyoruz:
- Site türünü ve iş yükünü netleştir (blog, WooCommerce, LMS, SaaS vb.).
- Varsayılan bir profil seç (örneğin WooCommerce için 512M memory_limit, 120 sn max_execution_time).
- Gerçek trafik ve kullanım alışkanlıklarını 1–2 hafta izle.
- Loglarda memory veya timeout hatası var mı kontrol et.
- Varsa, kod tarafı optimizasyonlarına da bakarak küçük adımlarla limitleri güncelle.
- Her değişiklikten sonra phpinfo() ve gerçek kullanıcı senaryolarıyla test yap.
Hata Mesajlarından Limit Problemlerini Okumak
memory_limit Hataları
Tipik hata mesajı:
PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 123456 bytes)...
Buradaki 268435456, 256M’e karşılık gelir. Bu hata genelde şunlarda karşımıza çıkar:
- WordPress eklenti/tema güncellemeleri,
- WooCommerce ürün ithalatları,
- Büyük sorgular ve raporlama ekranları.
Bu hatayı gördüğünüzde sadece memory_limit’i artırmak yerine, aynı zamanda:
- Hangi script’in bu hatayı ürettiğini loglardan tespit edin,
- Mümkünse sorgu veya işleme mantığını optimize edin,
- Yine de gerekiyorsa memory_limit’i makul bir oranda yükseltin.
Log okumaya alışık değilseniz Apache ve Nginx loglarını okuma rehberimiz bu noktada çok yardımcı olacaktır.
max_execution_time Hataları
Tipik hata mesajı:
PHP Fatal error: Maximum execution time of 30 seconds exceeded...
Bu hatayı gördüğünüzde:
- İlgili işlemin gerçekten ne kadar sürmesinin beklenebilir olduğuna bakın.
- İşlem bir defaya mahsus kurulum/güncelleme ise, geçici olarak max_execution_time değerini artırabilirsiniz.
- İşlem rutin bir cron veya kullanıcı aksiyonu ise, onu daha küçük parçalara bölecek bir mimari düşünmek daha sağlıklıdır.
Dosya Yükleme ile İlgili Tipik Hatalar
upload_max_filesize ve post_max_size ile ilgili sorunlarda genelde:
- Yönetim panelinde “dosya çok büyük” uyarıları,
- Herhangi bir hata mesajı olmadan yarıda kalan veya hiç başlamayan yüklemeler,
- PHP error log’unda POST Content-Length of X bytes exceeds the limit of Y bytes mesajı
görürsünüz. Bu durumda:
- Hem upload_max_filesize hem post_max_size değerlerinizi kontrol edin.
- web sunucusu (Nginx/Apache) tarafında ek upload limiti (client_max_body_size vb.) olup olmadığına bakın.
- memory_limit değerinizin, yüklediğiniz dosyanın işlenmesi için yeterli olup olmadığını gözden geçirin.
DCHost Ekibi Olarak Önerdiğimiz Genel PHP Limit Rehberi
Küçük Kurumsal / Blog Siteleri
Yeni açılan, az eklentili bir WordPress veya basit bir PHP CMS için genellikle aşağıdaki başlangıç profili gayet dengelidir:
- memory_limit: 128M – 256M
- max_execution_time: 60 sn
- upload_max_filesize: 16M – 32M
- post_max_size: 32M – 64M
Bu profille, standart tema/eklenti güncellemeleri, makale yayını, görsel yükleme gibi gündelik işler sorunsuz yürür. Trafik ve eklenti sayısı arttıkça, özellikle memory_limit’i 256M seviyesine çekmek neredeyse standart bir ihtiyaç haline geliyor.
WordPress + WooCommerce Siteleri
WooCommerce, hem veritabanı hem de PHP tarafında daha yoğun kaynak tüketir. Bizim pratikte sık kullandığımız başlangıç profili şöyle:
- memory_limit: 256M – 512M
- max_execution_time: 90 – 120 sn
- upload_max_filesize: 32M – 64M
- post_max_size: 64M – 128M
Ürün sayısı ve eklenti yükü arttıkça 512M memory_limit genelde mantıklı hale geliyor. Bunun yanında:
- OPcache,
- Object cache (Redis veya Memcached),
- HTTP seviyesinde tam sayfa önbellekleme
kullandığınızda, PHP tarafındaki yükü ciddi ölçüde azalttığınız için limitleri aşma ihtimaliniz de düşüyor. WooCommerce tarafına özel olarak MySQL/InnoDB tuning rehberimizi ve PHP özelinde PHP 8.x yükseltme kontrol listemizi de incelemenizi öneririz.
LMS, SaaS ve Yoğun İş Yükleri
Moodle gibi LMS platformları, çok kiracılı SaaS uygulamaları, büyük raporlama ve entegrasyon sistemleri için PHP limitleri genelde şöyle başlıyor:
- memory_limit: 512M – 768M (bazı rapor/batch işleri için 1G gerekli olabilir)
- max_execution_time: 120 – 300 sn (kritik işler CLI tarafta ayrı yönetilmeli)
- upload_max_filesize: 64M – 256M (ihtiyaca göre)
- post_max_size: upload değerinin 1.5–2 katı
Bu tip projelerde asıl farkı yaratanlar:
- İyi tasarlanmış veritabanı ve indeksler,
- Queue/kuyruk mimarileri,
- Önbellekleme katmanları (Redis, HTTP cache, CDN),
- Doğru boyutlandırılmış DCHost VPS veya dedicated sunucu altyapısı
oluyor. PHP limitleri burada son kat ayar gibi düşünülmeli; mimari ve kod tarafındaki optimizasyonların yerini tutmuyor.
Sonuç ve Yol Haritası
memory_limit, max_execution_time ve upload_max_filesize değerlerini doğru ayarlamak; sitenizin hızını, stabilitesini ve ölçeklenebilirliğini doğrudan etkiliyor. Çok düşük değerler, hatalar ve yarım kalan işlemler demek; çok yüksek değerler ise kontrolsüz kaynak tüketimi ve tüm sunucuyu kilitleyebilen senaryolar anlamına geliyor.
DCHost ekibi olarak önerimiz, bu üç ayarı her site için bilinçli bir başlangıç profili ile yapılandırmanız, ardından gerçek kullanım verisine göre küçük adımlarla güncellemeniz. Bunun için:
- Önce site tipinizi (blog, WooCommerce, LMS, SaaS) netleştirin.
- Bu rehberde önerilen aralıklardan makul bir başlangıç noktası seçin.
- Sunucu loglarını ve hata mesajlarını düzenli takip edin.
- Artan trafik ve yeni özellikler geldikçe limitleri gözden geçirin.
- Mümkün olduğunda, uzun süren işlemleri CLI ve queue mimarilerine taşıyın.
Eğer DCHost hosting, VPS, dedicated veya colocation altyapımızda çalışan projelerinizde bu değerleri nasıl konumlandırmanız gerektiğinden emin değilseniz, bize teknik detayları gönderin; CPU, RAM, disk ve trafik profilinize bakarak size özel PHP limit önerileriyle dönüş yapalım. Böylece ne “kısıtlı” ne de “kontrolsüz” bir yapı yerine, işinize gerçekten uyan, sürdürülebilir bir PHP konfigürasyonu ile ilerlersiniz.
