2011-10-17 80 views
-1

這些PHP下載頁面(例如somesite.com/download.php?id=somefile)如何經常找到工作?PHP下載頁面

我最初想到的是一個頁面,做櫃檯的東西,然後只是將用戶重定向到文件URL(這似乎是其他地方給出的唯一答案,但我不明白這是如何提供所有功能的)但是除此之外,這不會阻止直接鏈接,並且不允許我使用密碼保護某些文件。有些網站甚至似乎實施了下載速度限制(基於用戶帳戶),隊列用戶等。

+1

老實說,我不明白這個問題。你能解釋得更好嗎? –

+0

這個問題似乎沒有得到很好的研究,提問者對許多提出的答案缺乏評論或有意義的後續問題似乎表明他/她並不真正有興趣瞭解「下載」機制如何爲HTTP工作客戶端。因此-1。 – Peter

+0

@Fire Lancer:我看到你增加了一些評論。如果您編輯它以提供您不喜歡的直接鏈接的示例,以及有關您想要的密碼保護的更多詳細信息(以及爲什麼「硬編碼的」.htaccess文件獲勝「爲你工作)。 – Peter

回答

2

通常,這些不會重定向到文件的URL。相反,他們使用readfile()直接從URL的存儲位置(通常位於Web根目錄之外)輸出URL。解決直接連接,密碼保護,排隊等問題。速度限制將需要在Web服務器端。

+0

好吧,我看到了,沒有想到讓腳本本身服務於文件而不是Web服務器做自己的事情(有人在尋找「告訴Apache允許此客戶端訪問此文件」功能)。我想這就是爲什麼恢復在許多網頁上的部分下載不起作用?任何方式解決這個問題,因爲我的一些文件是非常大的,我和我都希望用戶不希望整個事情再次發送導致連接下降在99%:) –

+0

也讀文件工作相比,最好的Web服務器本身?我的服務器上CPU和內存都很有限。 –

+0

您將綁定一名Apache工作人員,這聽起來像是一個問題。對您而言,一個潛在的好選擇是在Amazon S3上託管下載並使用其到期簽名的URL。 http://stackoverflow.com/questions/6540925/amazon-s3-signed-url-in-php有一個PHP示例。 – ceejayoz

0

他們只是跟蹤你的許多事情 - 餅乾,IP地址,refferer鏈接,瀏覽器名稱。

+0

另一個來自一些勇敢的,口齒伶俐的SO用戶的蹩腳downvote ... – Peter

+0

爲了在我的語氣中保持一致,我想我應該寫:...另一個*來自一些勇敢,清晰的SO用戶的令人難以置信的洞察力* downvote ...並且因爲你顯然完全錯過了Peter Szymkowski的評論,他向你解釋CGI/mod_php腳本可以收集(並記錄)有關HTTP請求的信息。 – Peter

+0

只是upvoted這一點,was not我downvote所以我只能平等 –

0

這不是一個真正的PHP特定問題。爲了使網頁瀏覽器「下載」(無論是靜態文件的內容還是動態生成的報表的主體),請設置Content-Disposition header in the HTTP response。 PHP允許您使用header函數設置HTTP標頭,因此您的PHP腳本應該在將文件內容流式傳輸回HTTP客戶端之前完成此操作。

+0

Downvote without comment = [weaksauce](http://www.urbandictionary.com/define.php?term=weaksauce)。 – Peter

0

如果您在您的DownloadFile()函數之前添加了一些安全性驗證,則可以通過使用user_session或發送密碼作爲查詢的一部分輕鬆保護文件。

+0

而DownloadFile是?重定向到另一個文件不起作用,因爲人們可以直接鏈接真正的文件 –

+0

@FireLancer:atbyrd沒有說重定向 - 這似乎是你自己的想法(你自己的想法你又不喜歡)。你有沒有倒下這個(沒有明顯的原因)? – Peter

1

它經常使用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標題(用於下載加速器)。