Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
.htaccess üzerinden HTTP istek gövdesinin, dolayısıyla çoğu dosya yükleme isteğinin azami boyutunu LimitRequestBody yönergesiyle belirleyebilirsiniz. Değer bayt cinsindendir. Örneğin 100 MiB sınır koymak için sitenin kök dizinindeki .htaccess dosyasına şu satırı ekleyin:

Kod:
LimitRequestBody 104857600

Bu ayar, Apache'nin aldığı toplam istek gövdesini sınırlar. Yalnızca tek dosyanın boyutunu değil, aynı formda gönderilen dosyalarla birlikte istek gövdesinin tamamını etkiler.

Nasıl çalışır?​


Bir dosya yükleme formu genellikle HTTP POST veya PUT isteği gönderir. Apache, geçerli bağlamda istek gövdesinin kabul edilen boyutunu sınırlar; limit aşımında hata yanıtı verir. Bu ayarı, uygulama kodunun hiçbir bölümünün çalışmadığı veya tüm yan etkilerin geri alındığı garantisi olarak değerlendirmeyin.

Uygulanabilir kurulum​

  1. Sitenin belge kök dizinindeki .htaccess dosyasını açın. Dosya yoksa aynı adla oluşturun.
  2. Dosya yükleme ihtiyacınıza uygun bayt değerini ekleyin. Örneğin 100 MiB için LimitRequestBody 104857600 kullanın.
  3. Dosyayı kaydedin ve normal boyuttaki bir dosyayla yükleme işlemini test edin.
  4. Sınırı aşan bir dosyayla ikinci test yapın. Yanıt kodunu ve aynı isteğin Apache günlüğünü inceleyin. Büyük isteğin reddedilmesi tek başına Apache kanıtı değildir; CDN, proxy ve uygulama da sınır koyabilir.
  5. Küçük dosya da yüklenemiyorsa Apache hata günlüğünü ve uygulamanın yükleme hatasını kontrol edin; sorun yalnızca boyut sınırı olmayabilir.
Başarılı durumda sınırın altındaki dosya uygulamaya ulaşır ve uygulamanın kendi doğrulamalarından geçerse kaydedilir. Büyük dosyada ise sunucu isteği reddeder. Bu ayar dosyanın fiziksel boyutunu küçültmez ve uygulamanın izin verdiği maksimum dosya boyutunu tek başına artırmaz.

Değerin anlamı şöyledir:
YönergeDeğerYaklaşık sınır
LimitRequestBody 0SınırsızApache tarafından sınır uygulanmaz
LimitRequestBody 1048576010.485.760 bayt10 MiB
LimitRequestBody 104857600104.857.600 bayt100 MiB
Dosyanın kendisi sınırın altında olsa bile form alanları, çoklu dosyalar ve diğer istek verileri toplamı sınırı geçerse yükleme başarısız olabilir. Bu nedenle hedef dosya boyutundan biraz daha yüksek, ancak gereksiz derecede geniş olmayan bir istek sınırı seçin.

AllowOverride nedeniyle çalışmıyorsa​


Apache ana yapılandırmasında.htaccess kullanımına izin verilmiyorsa dosyaya yazdığınız yönerge dikkate alınmaz veya sunucu yapılandırmasına göre hata oluşur. LimitRequestBody yönergesinin.htaccess içinde kullanılabilmesi için ilgili dizinde uygun override yetkisi tanımlanmalıdır.

Sunucu yapılandırmasına erişiminiz varsa geniş yetki yerine yalnızca gerekli yönergeyi açmak daha kontrollü bir tercihtir:

Kod:
<Directory "/var/www/example.com/public_html">
    AllowOverrideList LimitRequestBody
</Directory>

Bu blok ana Apache yapılandırmasına aittir; .htaccess içine yazılmaz. Gerçek yükleme uç noktasını kapsayan dizin için, sunucu yöneticisi mevcut izin politikasını koruyarak eklemelidir. Paylaşımlı hosting hesabında bu bölümü değiştiremiyorsanız hosting sağlayıcısından LimitRequestBody yönergesine izin verilmesini istemeniz gerekir.

Sık yapılan hatalar​


Megabayt yazmak: LimitRequestBody 100 değeri 100 MB değil, 100 bayttır. Apache yönergesi bayt kabul eder.

Yalnız PHP veya uygulama ayarını değiştirmek: Uygulamanın kendi yükleme sınırı yüksek olsa bile Apache daha düşük bir LimitRequestBody değeriyle isteği daha önce reddedebilir. Tersine, Apache sınırı yükseltilse de uygulama daha düşük bir sınır uygulayabilir.

Toplam isteği hesaba katmamak: Birden fazla dosya yüklenen formlarda sınır, yalnızca en büyük dosyaya değil istek gövdesinin tamamına uygulanır.

Kayıt klasörünü istek adresi sanmak: Sınır, isteği karşılayan kaynağın yapılandırma bağlamında uygulanır. Dosya /storage/uploads içine kaydedilse bile POST /api/upload adresine gidiyorsa yalnız storage klasörüne dosya koymak doğru kapsam olmayabilir.

Her şeyi sınırsız yapmak: LimitRequestBody 0 Apache tarafındaki sınırı kaldırır; bu, uygulamanın sınırsız olduğu anlamına gelmez. Gerçek ihtiyaca uygun belirli bir değer kullanmak daha öngörülebilirdir.

Sık sorulan sorular​


Dosya 100 MiB olduğu halde neden reddediliyor?​


İstek gövdesinde dosya dışında form alanları ve çok parçalı yükleme bilgileri de bulunur. Ayrıca uygulama veya arka uç bileşeni Apache'den daha düşük bir sınır uyguluyor olabilir. Apache sınırını biraz pay bırakarak belirleyin ve uygulama günlüklerini de inceleyin.

Yönergeyi yalnızca yükleme klasörüne uygulayabilir miyim?​


Yalnız isteği gerçekten o dizindeki bir kaynak işliyorsa dizin kapsamı kullanılabilir. Laravel veya başka bir front controller tüm istekleri index.php üzerinden işliyorsa, yüklenen dosyanın sonradan kaydedildiği klasörün .htaccess dosyası POST sınırını belirlemez. Uç noktaya özgü sınırı sunucu yöneticisiyle doğru Directory/Location veya uygulama katmanında planlayın.

PHP sınırlarını .htaccess ile aynı şekilde mi değiştiririm?​


Hayır. PHP’de upload_max_filesize tek dosya, post_max_size ise toplam POST verisi için ayrı sınırlardır; ikincisinde ek alanlar ve çok parçalı istek payı gerekir. php_value satırları PHP-FPM/CGI kurulumlarında aynı şekilde çalışmaz ve 500 hatasına yol açabilir. Hosting’in desteklediği PHP ayar ekranı, uygun php.ini veya .user.ini yöntemi kullanılmalıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic