2009-10-21 62 views
-4

我想通过向MySQL服务器发送请求来查找PHP下载时间。我有一个带有href链接的表来下载文件。如果我点击下载,下载时间应显示在表格中的文件名旁边。任何人都可以请帮我吗?今天是我的最后期限。请看看我的代码:PHP/MySQL中的文件下载时间

<?php 
$con = mysql_connect("localhost","mt","mt"); 

mysql_select_db("mt", $con); 
$d = date("d/m/Y H:i:s"); 
$result = mysql_query("SELECT * FROM mt_upload"); 

echo "<table BORDER=2 BORDERCOLOR=RED> 
<tr> 
<th>FileName</th> 
<th>FilePath</th> 
<th>Uploaded Date/Time</th><th>Download Date/Time</th> 
</tr>"; 

while($row = mysql_fetch_array($result)) { 

    echo "<tr> 
     <td>". $row['FileName'] . "</td> 
     <td ><a href=../sites/default/files/ourfiles/". $row['FileName']." >Download</a></td> 
     <td>".$row['DateTime']."</td><td>$d</td> 
    </tr>" ; 
} 

echo "</table>"; 

mysql_close($con); 

回答

3

好了,现在我明白了基于OP的评论的问题。问题是如何弄清楚用户下载文件的时间。如果是这样的话,下载链接需要是一个php脚本,它会在时间写入db,然后将文件内容返回到具有适当内容头的流中。

请参阅readfile

<?php 
$file = 'monkey.gif'; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

您所要做的就是传入文件名作为参数并将当前时间写入数据库。

+0

您好,您可以发送一些鳕鱼我想在笏时间用户下载 – 2009-10-21 05:09:25

+2

如果您是初学者,现在您需要了解Web脚本如何工作。快捷方式不是解决方案。对不起,如果你觉得我在bit around,但这是我第一次这样做。 – 2009-10-21 05:19:30

+0

@Lavanya ks,只是为了澄清,你问的是用户下载给定文件的时间,而不是用户下载文件需要多长时间,对吗? – 2009-10-21 05:27:22

0

我不太确定,但我认为这不可能通过PHP。

当我打开一个PHP页面时,Web服务器给了我这个页面。当我点击下载xyz.abc文件的链接时,它实际上是向web服务器发送的另一个请求,并且当前的PHP页面不涉及这个。当前的PHP页面只是托管链接。

当我点击链接时,web服务器找到该文件并将其发送到客户端。它是服务于该页面的网络服务器,并且它是可以记录时间的网络服务器,因为它知道何时打开用于文件下载的套接字以及该套接字何时关闭。

如果有人知道如何通过PHP脚本来做到这一点,请让我知道。

+0

我认为下面的答案是正确的 - http://stackoverflow.com/questions/1598765/file-download-time-in-php-mysql/1598793#1598793 – 2009-10-21 05:40:43

1

如果你需要一些代码,你应该使用filesize,你可以通过一些计算来评估下载的时间,但你不知道确切的时间,因为它取决于用户速度以及服务器和用户之间的所有网络。

$filesize = filesize($yourfile); 
$time_for_modem = $filesize * 8/(56*1024); 
$time_for_adsl = $filesize * 8/(5*1024*1024); 
$time_for_t3 = $filesize * 8/(44*1024*1024); 

function convertSecondToTime($sec){ 
    $hour = floor($sec/60) 
    return $hour . 'hours and ' . ($sec%60) . 'minutes'; 
} 

调制解调器时间为56kbps连接,adsl为5 mbps,T3为44 mbps连接。

+0

问题出现在服务器不知道在什么速度下载正在发生。 – 2009-10-21 05:44:04

+0

服务器知道下载正在以什么样的速度发生,但是对于每个客户端来说它会有所不同,除此之外,如果你说你只有很少的客户端,并且你有权访问用户机器,这是一个不同的问题。 – RageZ 2009-10-21 05:45:47

+0

RagZ,我的意思是服务器知道时间,它知道它在什么时候打开要下载的套接字以及什么时候关闭它。现在更大的问题是PHP脚本如何从Web服务器知道这些统计信息? – 2009-10-21 05:51:29