PHP gerçekten büyük bir dosyayı yüklerken hata yok?

3 Cevap php

Ben dosya yükleme için bir PHP form var ve gayet iyi çalışıyor ve bir şey yanlış giderse, bir hata mesajı görüntüler. Bu tüm iyi.

Sorun gerçekten büyük bir dosya ile test ederken, ben hiç bir dosya gönderdi değil sanki sadece sayfayı yeniler ve formdan $ _POST değişkenlerin hiçbiri bile sunucuya gönderilir olmasıdır.

Onları dosya çok büyük olduğunu bildirerek, kullanıcıya bir hata göstermek istiyorum. Ancak, ben bunu yapamam.

Herkes neler olduğunu biliyor mu?

3 Cevap

Bir dosya PHP yüklenmesine izin verecek kadar büyük yöneten PHP ini dosyasını denetleyin. Bu değişkenler önemlidir:

  • max yükleme dosya boyutu (upload_max_filesize)
  • max sonrası veri boyutu (post_max_size)
  • bellek sınırı (memory_limit)

Bu sınırların dışında herhangi yüklenenler ayarlarınıza bağlı olarak, ya da beklemedeki faturalar, hatalı Çıkış göz ardı edilecektir.

Docs Bu bölümde iyi bir özeti var: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

EDIT: Ayrıca tarayıcıların çoğu boyutu 2GB fazla yüklenenler göndermek unutmayın. Bu bağlantı modası geçmiş, ama bir fikir veriyor: http://www.motobit.com/help/scptutl/pa98.htm. Herkes bu konuda bilgi daha iyi bir kaynak var mı?

Apache gibi sunucu tarafından empoze edilebilir sınırlar da vardır: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

Gerçekten neler olup bittiğini görmek için, muhtemelen (eğer firefox kullanıyorsanız) tarayıcı yükleme sınırını kontrol, sizin web sunucusu günlükleri kontrol, ve print_r($_FILES) yararlı herhangi bir hata sayılar üreten görmesini denemelisiniz. Bütün bunlardan başarısız olursa, Firebug net trafik monitörü deneyin. Anahtar isteği bile sunucuya gidiyor olup olmadığını belirlemek için, ve eğer (başlıklar dahil) isteği gibi ne görünüyor. Eğer zincirinde o kadar kazanılmış ettik, sonra da geri dönüp ve PHP yükleme işleme nasıl görebilirsiniz.

Yükleme * post_max_size * yönergesini aştığı çünkü $ _POST büyük olasılıkla boş:

PHP'nin gelen directives page:

If the size of post data is greater than post_max_size, the $_POST and $_FILES superglobals are empty. This can be tracked in various ways, e.g. by passing the $_GET variable to the script processing the data, i.e. <form action="edit.php?processed=1">, and then checking if $_GET['processed'] is set.

Düzenli ajax ne kadar yüklenme yapıldığını bilmek çağıran, basit bir komut dosyası uygulamak olacaktır. Daha sonra ilerleme çubuğu çeşit uygulayabilirsiniz. Net örnek bir çift vardır:

http://martinjansen.com/2007/04/28/file-upload-progress-bars-with-php/