PHP ile çok büyük yüklenenler

13 Cevap php

Ben bizim PHP uygulaması (- 8 konser megabaytlık yüz) içine çok büyük dosyalar yüklenenler izin istiyorum. Bu sorunların bir çift söz konusudur.

Tarayıcı:

  • HTML yüklenenler berbat geribildirim var, biz (biraz saçma) ilerleme için anket ya gerekir ya da hiç geri bildirim gösteriyor
  • Flaş uploader yükleme başlamadan önce belleğe tüm dosya koyar

Sunucu:

  • PHP kolay sömürülebilir DOS saldırısı neden olabilecek, post_max_size ayarlamak için bizi zorlar. Ben bu küresel ayarını değil istiyorum.
  • Sunucu ayrıca böyle bir gizli anahtar olarak POST vars, orada olmak için bazı diğer değişkenleri gerektirir. Biz bunun yerine tüm dosya yüklenir sonrası, hemen isteğini geri edebilmek istiyorum.

Koşullar:

  • HTTP bir zorunluluktur.
  • Ben sürece bir tarayıcıda çalışır gibi, istemci-tarafı teknolojisi ile esnek değilim.
  • PHP Linux ortamında iyi çalışacak bazı diğer teknoloji varsa, bu mükemmel serin, bir gereklilik değildir.

13 Cevap

Nasıl bir Java uygulaması hakkında? Yani, biz daha önce çalışmış bir şirkette bunu yapmak zorunda nasıl. Ben uygulamalar özellikle mevcut tüm seçenekleri ile bu gün ve yaş, emmek biliyorum, ama onlar gerçekten web geliştirme karşılaşılan masaüstü gibi sorunlara çok yönlü bir çözümdür. Sadece bir şey düşünün.

upload_max_filesize set on a per-directory basis olabilir; Aynı post_max_size için de geçerlidir

örneğin:

<Directory /uploadpath/>
  php_value upload_max_filesize 10G
  php_value post_max_size 10G
</IfModule>

Python Handler?

Python POST işleyicisi yerine PHP kullanarak. Istemci HTTP başlıklarını koyabilirsiniz PHP app benzersiz bir tanımlayıcı oluşturmak. Tüm POST beden önce büyük yüklemeyi reddetmek veya kabul etmek mod_python iletilir ile.

I think http://www.modpython.org/live/current/doc-html/dir-handlers-hph.html

Eğer başlıklarını kontrol ve POST giriş kalanını düşüş sağlar. Ben denemedim ama doğru yol olabilir?

Mod_python, okuma yoluyla giriş tamponlama kaynağına baktığımızda () HTTP girdi bit-at-a-zaman değerlendirme izin görünüyor. Başlıkları ilk vardır.

https://svn.apache.org/repos/asf/quetzalcoatl/mod_python/trunk/src/filterobject.c

It's old I know, but maybe someone have this problem nowdays ,too. Now you can do this with only Javascript and, say, PHP. No Flash or Java required on client side.

demo: http://dnduploader.filkor.org/

Fikir Javascript Blob dilim () yöntemi ile dilim dosyaları için ...

Belki tarayıcıda WebDAV'ı ve Javascript kullanabilirsiniz

AJAX Big file upload, with progress, to WebDAV

http://www.webdavsystem.com/ajax/programming/upload_progress

A simple library

http://debris.demon.nl/projects/davclient.js/doc/README.html

Daha sonra JS bir başarı sayfasına kullanıcıyı yönlendirmek için alabilirsiniz. Gizli anahtarları ve ne değildir JS Client-> WebDAV'yi teslim etmeden önce bir PHP başlangıcı olarak ele alınabilir

Siz 1 dizinde sadece komut için post_max_size ayarlayabilirsiniz. Orada yükleme komut yerleştirin, ve sadece bu komut büyük boyutlarda işlemek için izin. Büyük / gereksiz dosyaları ile saldırıya için, bu komut için hala mümkün, ama bu küresel ayarlama önler.

Use that with APC and you might be able to work out something good: IBM Developer works article on APC

Tüm bu Yargılanan ... bu kadar ben henüz kullandım iyi ...

http://www.uploadify.com/

jumploader.com bir göz atın

Yüklemek için iyi bir java-applet.

Ben fotoğraf yüklemek için kullandım ve gayet iyi çalışıyor. 10MB daha büyük dosyalar ile denemedim, ama gerçekten çok büyük dosyalar için çalışması gerekir.

Eğer ilerleme ve toplam dosya boyutunu kontrol etmek APC kullanarak içine baktım. İşte good blog post konuda. Bu yardımcı olabilir.

I FTP, SSH or SCP Bu büyük bir dosya upload ve halen de dosya üzerinde erişim kontrol sahibi olmanızı sağlar içine bakmak istiyorum. Bu uygulamak için biraz daha uzun sürebilir ama onun muhtemelen en güvenli şekilde ben düşünebilirim.

I uploadify ile başarı elde ettik ve bunu tavsiye ederim. Büyük yüklenenler kolları bir jQuery / Flaş script, ve (gizli anahtar gibi) buna ilave parametreleri geçirebilirsiniz. Sunucu tarafı sorunları çözmek için sadece aşağıdaki kodu kullanabilirsiniz. Değişiklikler sadece onlar denilen konum script etkileyecek alacak:

//Check to see if the key is there
if(!isset($_POST['secret_key']) || !isValid($_POST['secret_key']))
{
    exit("Invalid request");
}
function isValid($key)
{
    //Put your validation code here.
}

//This line changes the timeout.
//Give it a value in seconds (3600 = 1 hour)
set_time_limit(3600);

//Set these amounts to whatever you need.
ini_set("post_max_size","8192M");
ini_set("upload_max_filesize","8192M");

//Generally speaking, the memory_limit should be higher
//than your post size.  So make sure that's right too.
ini_set("memory_limit","8200M");

EDIT Yorumlarınız cevaben:

Eğer söylediklerinizi göz önüne alındığında, ben http üzerinden ihtiyaçlarınızı karşılamak mümkün olmayabilir korkuyorum. Orada çözümleri her bunun için tasarlanmış değildi ki http özellikler eklemek kod vardır.

Dediğin gibi, basit bir protokol. Apart tarayıcı dışında çalışan kendi istemci yazılımı yazma, bir java uygulaması, ya da (bunun için tasarlanmış FTP gibi) farklı bir protokol kullanarak, istediğinizi alamayabilirsiniz.

Ben verilen kısıtlar dahilinde elimden geleni yaptım. Üzgünüm iyi yapamadı.

Ben başka bir bağımlılık eklemek için berbat biliyorum ama benim deneyim, böyle bir şey yapıyorsun en web siteleri istemci tarafında flaş kullanarak ve parçaları gibi büyük dosya gönderiyor

kerpiç bir howto on flash file uploads olarak

Ben de CodeProject Bu öğretici bulundu:

Multiple File Upload With Progress Bar Using Flash and ASP.NET

PS -. Sana net PHP kullanarak değil, biliyorum, ben önemli bir parçası flaş olduğunu düşündüm ;)

Bunu deneyin: http://www.simple2ftp.com bir akıllı PHP uygulama sargı içinde bir Java tabanlı bir FTP uygulamasını kullanır.