2011-01-07 52 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

请不要使用尖叫的“购买帐户进行更快下载并且不等待时间”广告。我求求你。 – 2011-01-07 01:50:26

+0

我会尝试带来更原创的东西。 – metrobalderas 2011-01-07 03:54:16

回答

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地址。你在使用数据库系统吗?

相关问题