2015-03-03 88 views
1

我嘗試創建用戶可以購買視頻/音頻文件的商店。這些文件將被放置在另一臺遠程服務器(Debian)上。我無法弄清楚如何讓特定用戶下載。我可以通過IP莫名其妙地計算控制之和鏈接將是這樣的:讓用戶僅通過密碼下載視頻/音頻文件

http://100.000.000.000/files/video.avi?hash=87a686d86d8868a6868a

但是該如何檢查遠程服務器上?我不知道用PHP腳本來閱讀整個電影文件是個好主意。

+0

使用'md5_file()'計算散列而不將整個文件讀入內存。 – Barmar 2015-03-03 07:58:31

回答

1

基本上有兩種方法是可能的。

文件系統:

你可以使用文件系統,創建一個密碼保護的文件夾爲每個用戶及其所有文件複製到它,或者更好,如果你使用Linux,使用符號鏈接(LN - S)。

PHP:

或者你可以通過PHP流文件,同時它會檢查訪問。我不認爲這是一個真正的問題。如果只是推送原始數據,PHP不需要做太多的工作。

$total  = filesize($filepath); 
$blocksize = (2 << 20); //2M chunks 
$sent  = 0; 
$handle = fopen($filepath, "r"); 

// Push headers that tell what kind of file is coming down the pike 
header('Content-type: '.$content_type); 
header('Content-Disposition: attachment; filename='.$filename); 
header('Content-length: '.$filesize*1024); 

// Now we need to loop through the file and echo out chunks of file data 
// Dumping the whole file fails at > 30M! 
while($sent < $total) { 
    echo fread($handle, $blocksize); 
    $sent += $blocksize; 
} 

(代碼是短暫的,沒有錯誤檢查,沒有密碼校驗,沒有文件關閉等)

它取決於你有什麼樣的密碼體系,你被允許做什麼在你的服務器上。

+0

第二種方法似乎更適合我。你能告訴我如何用PHP做到這一點?我無法想象如何給2Gb文件給用戶,我認爲它沒有足夠的RAM內存來讀取它。 – 2015-03-03 08:18:43

+0

您將它流式傳輸給用戶,不需要將其全部存儲在內存中。例如,請參閱:http://teddy.fr/2007/11/28/how-serve-big-files-through-php並參閱:http://www.media-division.com/the-right-way-way -to-handle-file-downloads-in-php – 2015-03-03 08:23:50

+0

非常感謝我的朋友 – 2015-03-03 08:41:48