2011-01-07 1 views
3

Я разрабатываю быстрый сайт, похожий на rapidshare, где пользователь может загружать файлы. Во-первых, я создал быстрый тест настройки заголовков и с помощью readfile(), но потом я нашел in the comments section есть способ ограничить скорость загрузки, которая отлично подходит, вот код:PHP: Как узнать, загружает ли пользователь файл?

$local_file = 'file.zip'; 
$download_file = 'name.zip'; 

// set the download rate limit (=> 20,5 kb/s) 
$download_rate = 20.5; 
if(file_exists($local_file) && is_file($local_file)) 
{ 
    header('Cache-control: private'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: '.filesize($local_file)); 
    header('Content-Disposition: filename='.$download_file); 

    flush(); 
    $file = fopen($local_file, "r"); 
    while(!feof($file)) 
    { 
     // send the current file part to the browser 
     print fread($file, round($download_rate * 1024)); 
     // flush the content to the browser 
     flush(); 
     // sleep one second 
     sleep(1); 
    } 
    fclose($file);} 
else { 
    die('Error: The file '.$local_file.' does not exist!'); 
} 

Но теперь мой вопрос, как ограничить количество загрузок одновременно? Как я могу проверить, есть ли еще соединение с IP-адресом пользователя?

Спасибо.

+8

Пожалуйста, не используйте крики «ЗАКУПКА СЧЕТА ДЛЯ БЫСТРОГО ЗАГРУЗКИ И НЕТ ОЖИДАНИЯ». Я просил тебя. –

+0

Я постараюсь прийти с чем-то более оригинальным. – metrobalderas

+0

thx [15 charzz] –

ответ

3

Есть ли у пользователя логин? если не просто использовать сеансы или даже лучше отслеживать их ip-адрес.

Вот пример сессии:

$_SESSION['file_downloading']==true; 
$file = fopen($local_file, "r"); 
while(!feof($file)) 
{ 
    // send the current file part to the browser 
    print fread($file, round($download_rate * 1024)); 
    // flush the content to the browser 
    flush(); 
    // sleep one second 
    sleep(1); 
} 
$_SESSION['file_downloading']=null; 
fclose($file);} 

Тогда над всем этим кодом,

if(!empty($_SESSION['file_downloading'])) 

// выполнить перенаправление или уменьшить их скорость загрузки или что-то.

Следующая опция - через IP-адрес.

//http://wiki.jumba.com.au/wiki/PHP_Get_user_IP_Address 
function VisitorIP() 
    { 
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
     $TheIp=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    else $TheIp=$_SERVER['REMOTE_ADDR']; 

    return trim($TheIp); 
    } 

получить адрес IP-адреса посетителя, сохранить его в базе данных вместе со штампом даты и времени. Затем просто удалите этот ip-адрес, когда файл завершит загрузку. Используете ли вы систему баз данных?

+2

'if (isset ($ _ SESSION ['file_download']) && $ _SESSION ['file_downloading'])' → 'if (! Empty ($ _ SESSION ['file_downloading']))' :) – deceze

+0

@deceze хороший вызов. Отредактировал это. – Jason