2013-12-17 103 views
0

我有一個腳本,我上傳的PDF文件,用戶可以下載。下載計數並在php中顯示文件大小

現在我想顯示以MB爲單位的下載計數和文件大小。

我也想要一些幫助,以避免任何可能的攻擊,因爲我的腳本非常簡單。

download.php是如下

<?php 
    include("admin/config.php"); 
    $id = $_REQUEST['id']; 
    $sql = "SELECT * FROM novels where id=$id"; 
    $rs = mysql_query($sql); 
    $row = mysql_fetch_array($rs); 
    $pdf = $row['pdf']; 
    $name = $row['title']; 
    $path = 'admin/'; 
    $file = $path.$pdf; 
    $filename = $pdf; 
    header("Content-Type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename='$name-bookspk.net.pdf'"); 
    header("Content-Length: filesize($file)"); 
    readfile($file); 
    ?> 
+1

通常的安全提示適用,使用谷歌時你會發現它們。例如,你的腳本容易受到sql注入的影響。停止使用長期棄用的mysql擴展,開始使用PDO或mysqli並使用預準備語句。 – arkascha

+0

也確保您的管理員文件夾受到訪問保護,以避免您的用戶直接下載文件。 –

回答

1

對於下載計數,你可以保存到數據庫

$sql = "UPDATE `novels` SET `count`=`count`+1 WHERE `id`=".(int)$id; 

假設你有一個數列

下載,大小你應該將filesize出來:

header("Content-Length: ".filesize($file)); 

這是允許瀏覽器看到進展,如果你想顯示它,它是一樣的,你可以將它存儲在數據庫中

$sql = "UPDATE `novels` SET `size`=".filesize($file)." WHERE `id`=".(int)$id; 

這應該在您上傳時設置。

記住要逃避你的mysql查詢,因爲漏洞。對於整數很簡單,因爲您可以投出(int)

+0

感謝Mihai Lorga我是發展領域的新人,請詳細告訴我,我應該在小說表中再多列一欄,並在uloading頁面或下載頁面上設置它。我怎麼能存儲文件大小我只使用數據庫中的路徑請不要介意 – user3061787

+0

計數查詢工作正常 – user3061787

+0

當你上傳你應該存儲的大小。 –

0

嘗試增加緩存頭本應減少次數的文件是從服務器,如果你擔心誤報下載的數量。

<?php 
header("Expires: Sat, 26 Jul 2020 05:00:00 GMT"); // Date in the future 
?> 

當它被上傳這樣你可以得到所有的信息從一個調用數據庫的你或許應該存儲在表中的文件大小。

相關問題