2009-10-21 57 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