PHP MAX_FILE_SIZE - nokta nedir?

5 Cevap

Ben bir dosya yükleme formu yapmaya çalışıyorum ve bu konuda benim belleğimizi tazelemek için PHP belgeleri kontrol edildi. Here is a link to the relevant article. Ben bu mesajı fark Aniden:

(Bayt cinsinden) MAX_FILE_SIZE gizli alan dosya giriş alanından önce bulunmak zorundadır ve değeri PHP tarafından kabul azami dosya boyutudur. Bu kullanıcıların sadece çok büyük ve aktarım başarısız olduğunu bulmak için aktarılıyor büyük bir dosya için bekleme derdinden kurtarır gibi bu form elemanı her zaman kullanılmalıdır. Aklınızda tutun: tarayıcı tarafında bu ayarı bırakmak oldukça kolaydır, bu nedenle bu özellik tarafından engellendiğini büyük boyuttaki dosyaların güvenmemelisiniz. Bu yalnızca uygulamanın istemci tarafında kullanıcı için bir özelliktir. Maksimum boyutu (sunucu tarafında) PHP ayarları, ancak aptal olamaz.

Tamam ... Ne dedin? Birincisi o must dosya yükleme alanından önce söyler. Sonra o kolaylık ibaret olduğunu söyler. Ve yanı sıra - Herkes onunla karışıklık olabilir bu yüzden zaten istemci tarafında bulunuyor. Etrafta Googling sonra ben de bunu destekleyecek hiçbir bilinen tarayıcılar vardır bilgiler bulundu.

WTF? Neden o (tüm niyet ve amaçlar için) kesinlikle anlamsız gibi görünüyor eğer must dosya yükleme alanından önce söylenir? Ben benim HTML koyarak rahatsız mıyım?

5 Cevap

Şu anda oldukça anlamsız olduğu yani aslında MAX_FILE_SIZE yönergesi umurumda hiçbir tarayıcı vardır. Ben oldukça php.ini 's ile giderek daha size (Yukarıda belirtilmiş poster olarak) upload maksimum boyutları üzerinde daha ayrıntılı bir denetim vermek yok, ama şahsen ben sadece bunu görmezden varsayalım, ve muhtemelen de gerekir. Kesinlikle yükleyerek bir kullanıcı durmayacak bir gerekli dosya daha büyük - manuel bu konuda oldukça yanıltıcı.

Ve PHP'nin kutsal kaynağında peeked - sonra sert önlemlere başvurmak için karar verdik MAX_FILE_INFO hakkında herhangi bir yetkili bilgi bulmak girişimi başarısız oldu.

Ben ardışık grep kullanarak tüm PHP kaynak taranmış:

grep -ri MAX_FILE_SIZE .

The only place that mentioned this variable was (excluding tests folder) - rfc1867.c file. Completely expectable since rfc1867 standard deals with file uploads.

Related C code:

......
if (!strcasecmp(param, "MAX_FILE_SIZE")) {                                                                                                                                                                              
   max_file_size = atol(value);
}
......
......
if (PG(upload_max_filesize) > 0 && (total_bytes+blen) > PG(upload_max_filesize)) {
    cancel_upload = UPLOAD_ERROR_A;
} else if (max_file_size && ((total_bytes+blen) > max_file_size)) {
    cancel_upload = UPLOAD_ERROR_B;
} else if
....

So - burada short explanation Yukarıdaki kod var:

1) Önce biz max_file_size değişkene MAX_FILE_SIZE değerini almak.

Zaten kabul bayt (total_bytes) toplamı + tampon bayt boyutu (blen) MAX_FILE_SIZE aşarsa 2) Sonra max_file_size değeri varsa kontrol edin ve.

3) 2 doğruysa - bu noktada biz bu sabit tarafından belirlenen oldu bazı hata kodu ile yükleme iptal: UPLOAD_ERROR_B

BUT - as you can see - right before cehcking max_file_size variable - PHP performs EXACTLY THE SAME CHECK for upload_max_filesize variable!!! So - there we have it.

Conclusion: IMHO - op is right - there is 0 point in including MAX_FILE_SIZE into your forms! Simply set upload_max_filesize in your php.ini file or dynamically via ini_set().

Ben nokta conformant tarayıcılar kullanıcı bir dosya en azından kısmi bir yükleme (bir süre alabilir ki) gerçekleştirmek zorunda bunları kaydetmek istiyorum çok büyük bir dosyayı, seçilmiş durumda form gönderimini önlemek olacağını inanıyorum reddedilmiş olacak.

Sunucu tarafında, PHP hala çekler ve PHP.ini belirlenen çeşitli sınırları zorlar ve bir yükleme $ HTTP_POST_FILES ayarlanmış bir hata kodu, yani normal şekilde çok büyük olduğu gerçeğini referans olacaktır. JavaScript doğrulama için bir benzetme olarak alanın düşünebilir - biz kullanıcının kolaylık sağlamak için hızlı bir istemci tarafı denetimi yapmak olabilir, ama biz hala tüm istekleri için uygun bir sunucu tarafı test yapmak ve uygulamak.

Diğerleri de belirtildiği gibi, aslında nispeten işe yaramaz hale, bu denetimi gerçekleştirmek için zahmet herhangi tarayıcılar orada görünmüyor.

What follows is me being wrong, please read the other answers which are better-informed, and accurate (AFAIK).

Ben nokta devletler tam olarak düşünüyorum:

This form element should always be used as it saves users the trouble of waiting for a big file being transferred only to find that it was too large and the transfer failed

Evet, aptal olabilir, ve böylece tarih olmaktan büyük dosyaları engellemek için dayanıyordu olmamalı, ama yüklenen dosya bu alanda tamsayı daha büyük ise kötü niyetli olmayan kullanıcılar için, PHP bu yükleme izin vermiyor ve bir hata sunuyor $_FILES dizi kodu (kaynak - comments on php.net).

Ben belirli bir uygulama php.ini olarak sınırından daha küçük dosyaları gerektiğinde dosya boyutu limiti ayarlamak için kullanın. Benim php scriptler kontrol, ancak HTML biçiminde ayarlanır. Farklı formlar farklı dosya boyutu sınırları var. Bu amaçlanan kullanımı ile yapmak çok şey var emin değilim, ama bu daha kolay benim komut yeniden yapar. Bu tarayıcı düzeyinde kontrol edilebilir eğer iyi olurdu, ama o yararlıdır tek nedeni bu değil.