Bir app kullanıcı depolama sınırlayan bir çözüm oluşturmak için?

5 Cevap

Ben bir kullanıcı kendi dosyaları ile erişebilir depolama miktarını sınırlamak için iyi bir çözüm bilemiyorum.

Uygulamasında kullanıcıların dosyaları bir sınırı miktarda yüklemek için izin verilir. Sınırlama toplam dosya boyutuna bağlıdır. Yani Bir kullanıcı sunucu üzerinde 50 Mb saklamak için izin olabilir.

Kolaylıkla arttırılabilir, böylece bu sayı, bir veri tabanında depolanır / azalmıştır.

Kullanılan dili PHP, ama çözüm betik dili bağlı değildir sanırım.

Soru belirsiz ise çok üzgünüm. Ben gerçekten uygulamak için bir strateji daha fazla ne sormak için bilmiyorum.

Teşekkürler!

5 Cevap

Kullanılan ne kadar yer izleyebilmek basit olmalı - Her zaman başka bir tabloda kullanılan alanı saklamak karşıya ile. PHP filesize() fonksiyonu ve diskteki bir dosyanın boyutunu anlatacak. Her kullanıcı tarafından yüklenen tüm dosyaların toplam boyutu almak ve onların kota sınırı karşı karşılaştırmak için bir SUM() SQL sorgusunu kullanın.

Eğer sınıra yaklaştığı yaparken zor bit - Eğer dosya yüklendiği bulunuyor önce olacak kadar büyük söyleyemem. Yani bir dosya yüklemek için kullanıcı almak gerekecek ve daha sonra kendi boyutunu kontrol ve kota onları alırsa bakın. Dosya çok büyük ise, silme ve kullanıcı onlar alanı dışında olduğunu bileyim.

Basit bir yaklaşım, çok dosya adı, tarih ve veritabanında kullanıcılar yüklenenler boyutları depolamak olacaktır. Onların toplam depolama aştığında Sonra kolayca yükleme reddedebilirsiniz.

Bu da kolay kendi sınırına yakın bir kullanıcı kaldırılması için bazı dosyaları seçmek için izin, çeşitli şekillerde sıralandığını dosyaların bir listesini göstermek için yapar.

Hatta hepsi kendi alanı kullanarak yakın alıyorsanız kullanıcı yüklenenler onları uyarmak için dosyaların ortalama boyutu kullanabilirsiniz.

Bir dizinin içeriğini dolaşır, filesizes hesaplar ve daha sonra uymaz dosyaları siler ya da yeni yüklenenler reddeder bir script (that gibi bir şey) kullanabilirsiniz. Ama bu iyi bir sunucuda dizin kısıtlamalar çeşit ile yapılabilir diye düşünüyorum. Ne yazık ki, ben bir linux adam değilim, bu yüzden ben bunu tam olarak nasıl bilmiyorum, ama bu post yardımcı olabilir.

Drewm Çözüm Ben sadece o sözü zor kısmı hakkında birkaç kelime eklemek istediğiniz, iyidir.

Dosya yüklenir önce kullanıcı `s dosya yükleme sayfasında javascript kullanarak boyutunu da kontrol edemez gibi Evet, bu, dosya boyutunu tahmin etmek imkansızdır. Eğer flash tabanlı dosya aktarıcı (swfupload.org örneğin) kullanarak bunu yapabilirsiniz ancak. Yükleme başlamadan önce bunu kullanarak dosya boyutunu kontrol edebilir ve varsa upload limitini karşı kontrol edin. Bu şekilde kullanıcı için zaman elde etmek için (dosya yüklemek için gerek mesaj "sınırını aşan hata") kurtaracak.

Bir bonus olarak siz de kullanıcı yükleme ilerleme çubuğu gösterebilir.

Don 'OS çözümleri unutun. Dosyaları "kullanıcı" belirli bir dizinde saklanır varsa, o zaman bu dizinde kullanılan aralıklı diski bulmak için OS kullanabilirsiniz. Bir Linux çözümü böyle bir şey olur:

$dirSize = explode("\t", `du -ks $userDir`);  // Will return an array of size, dirName
if ($dirSize[0] > MAX_DIR_LIMIT) print "USER IS OVER QUOTA";