這些PHP下載頁面(例如somesite.com/download.php?id=somefile)如何經常找到工作?PHP下載頁面
我最初想到的是一個頁面,做櫃檯的東西,然後只是將用戶重定向到文件URL(這似乎是其他地方給出的唯一答案,但我不明白這是如何提供所有功能的)但是除此之外,這不會阻止直接鏈接,並且不允許我使用密碼保護某些文件。有些網站甚至似乎實施了下載速度限制(基於用戶帳戶),隊列用戶等。
這些PHP下載頁面(例如somesite.com/download.php?id=somefile)如何經常找到工作?PHP下載頁面
我最初想到的是一個頁面,做櫃檯的東西,然後只是將用戶重定向到文件URL(這似乎是其他地方給出的唯一答案,但我不明白這是如何提供所有功能的)但是除此之外,這不會阻止直接鏈接,並且不允許我使用密碼保護某些文件。有些網站甚至似乎實施了下載速度限制(基於用戶帳戶),隊列用戶等。
通常,這些不會重定向到文件的URL。相反,他們使用readfile()
直接從URL的存儲位置(通常位於Web根目錄之外)輸出URL。解決直接連接,密碼保護,排隊等問題。速度限制將需要在Web服務器端。
好吧,我看到了,沒有想到讓腳本本身服務於文件而不是Web服務器做自己的事情(有人在尋找「告訴Apache允許此客戶端訪問此文件」功能)。我想這就是爲什麼恢復在許多網頁上的部分下載不起作用?任何方式解決這個問題,因爲我的一些文件是非常大的,我和我都希望用戶不希望整個事情再次發送導致連接下降在99%:) –
也讀文件工作相比,最好的Web服務器本身?我的服務器上CPU和內存都很有限。 –
您將綁定一名Apache工作人員,這聽起來像是一個問題。對您而言,一個潛在的好選擇是在Amazon S3上託管下載並使用其到期簽名的URL。 http://stackoverflow.com/questions/6540925/amazon-s3-signed-url-in-php有一個PHP示例。 – ceejayoz
這不是一個真正的PHP特定問題。爲了使網頁瀏覽器「下載」(無論是靜態文件的內容還是動態生成的報表的主體),請設置Content-Disposition header in the HTTP response。 PHP允許您使用header函數設置HTTP標頭,因此您的PHP腳本應該在將文件內容流式傳輸回HTTP客戶端之前完成此操作。
Downvote without comment = [weaksauce](http://www.urbandictionary.com/define.php?term=weaksauce)。 – Peter
如果您在您的DownloadFile()函數之前添加了一些安全性驗證,則可以通過使用user_session或發送密碼作爲查詢的一部分輕鬆保護文件。
而DownloadFile是?重定向到另一個文件不起作用,因爲人們可以直接鏈接真正的文件 –
@FireLancer:atbyrd沒有說重定向 - 這似乎是你自己的想法(你自己的想法你又不喜歡)。你有沒有倒下這個(沒有明顯的原因)? – Peter
它經常使用PHP函數readfile
完成:
if(is_allowed_to_download()){
header("Content-Disposition: attachment; filename=".basename($file));
header("Content-Type: application/octet-stream");
header("Content-Length: ". filesize($file));
header("Content-Transfer-Encoding: binary");
@readfile($file);
exit;
}
不太常見的服務器的具體解決方案是使用 - 爲發送的lighttpd和Apache與mod_xsendfile頭X-SendFile: file-location.exe
(nginx的也有一定的等價物)。這些稍微好一點,因爲HTTP服務器已經過優化,可以提供內容並允許高級用戶使用,如Range
標題(用於下載加速器)。
老實說,我不明白這個問題。你能解釋得更好嗎? –
這個問題似乎沒有得到很好的研究,提問者對許多提出的答案缺乏評論或有意義的後續問題似乎表明他/她並不真正有興趣瞭解「下載」機制如何爲HTTP工作客戶端。因此-1。 – Peter
@Fire Lancer:我看到你增加了一些評論。如果您編輯它以提供您不喜歡的直接鏈接的示例,以及有關您想要的密碼保護的更多詳細信息(以及爲什麼「硬編碼的」.htaccess文件獲勝「爲你工作)。 – Peter