Rapidshare gibi limitleri ve bekleme süreleri

3 Cevap php

Ben dosyaları bir dizi indirilebilir açık bir ortam, hiçbir giriş var. Ben şimdi bir bekleme süresi özelliği ve (daha önce bunları kullandım eğer Rapidshare ne benzer) zaman tipi şey dönemi başına ziyaretçi başına bir bant genişliği sınırı kurmaya çalışıyorum.

Nasıl bu uygulama hakkında herhangi bir fikir gitmeli? Ben PHP yüzden tüm kısıtlamalar / avantajları (Bu durumda eğer varsa) uygulanır değilim.

Hepinize teşekkür ederim.

3 Cevap

Bir giriş sistemi olmadan yapabileceğiniz en iyi zaman sabit miktarda bir IP adresi için bir indirmek için kısıtlamak olduğunu. Ben bu Rapidshare de ne olduğuna inanıyorum.

Bu uygulamak için en kolay yolu, bir IP adresi bir düz dosya formatında veya bir veritabanında ya, bir indirme başlar süreyi kaydetmek için. Zaman önceki indirme zaman geçtikten gerekli bekleme süresi daha az ise, o zaman bir hata sayfası kullanıcıyı yönlendirmek. Aksi takdirde, download link kullanıcıyı yönlendirmek.

Şık sayaç sadece bir Javascript hiledir. Kolayca Javascript sayaçlarını kullanarak birini yazabilirsiniz ama bu sadece göstermelik. Gerçek indirme yeteneği her zaman (sizin durumunuzda PHP) serverside tespit edilmelidir.

Ben Kai katılıyorum ama bir başka çözüm Bunu yapmak için şu işlevi kullanabilirsiniz, düşük bir hızda dosya hizmet etmek olabilir.

function Doo_Download($path, $speed = null)
{
    if (is_file($path) === true)
    {
    	set_time_limit(0);

    	while (ob_get_level() > 0)
    	{
    		ob_end_clean();
    	}

    	$size = sprintf('%u', filesize($path));
    	$speed = (is_null($speed) === true) ? $size : intval($speed) * 1024;

    	header('Expires: 0');
    	header('Pragma: public');
    	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    	header('Content-Type: application/octet-stream');
    	header('Content-Length: ' . $size);
    	header('Content-Disposition: attachment; filename="' . basename($path) . '"');
    	header('Content-Transfer-Encoding: binary');

    	for ($i = 0; $i <= $size; $i = $i + $speed)
    	{
    		echo file_get_contents($path, false, null, $i, $speed);

    		flush();
    		sleep(1);
    	}

    	exit();
    }

    return false;
}

Downloader.php dosyayı uyku deneyin ...

http://php.net/manual/en/function.sleep.php (zaman aşımı ayarlamadan önce başlıkları ayarlayabilirsiniz ... filetype)

Bu beklemek sayfayı zorlarsınız ... ve indirme sayfasına linkler sayfada size bunu indirme sayfası çalışırken çalışmaya devam etmelidir ... kullanıcı bildirmek için bir tür javascript sayaç koymak, ya da olabilir Yeni bir sayfa / pencerede downloader dosyasını koyabilirsiniz, otomatik olarak indirilen dosya olarak intereptered (x-octet-stream filetype ... http://www.vbulletin.com/forum/showthread.php?70959-HTTP-Headers-to-force-file-to-download-rather-than-auto-open&s=f54c68f056a4c7f13762e43bcfe44fdc)

Ayrıca, belli bir miktarda yükleme sayfalara erişmek için güçlü olmak aslında kısıtlamak için bir oturumu kullanabilirsiniz, ama daha envasive bulunuyor.