2010-11-05 53 views
1

沒有進入,關於網站其他部分的詳細信息我有一個用戶表,ID,名稱,密碼等非常標準的用戶設置。有些用戶是「免費」用戶有些已通過paypal支付,這是由「user_premium」表設置爲1或0.通過PHP + SQL保護郵編

我想要做的只是允許下載一個zip文件,如果用戶有溢價。很明顯,如果他們沒有,我可以隱藏我的網頁上的鏈接,但他們仍然可以直接訪問domain.com/myfile.zip。

我試圖阻止通過htaccess直接訪問zip,並在PHP腳本中使用fpassthru來訪問文件,例如(飛示例代碼)

 
if($user->can_download()) { 
    $fp = fopen('myfile.zip', 'rb'); 

    header("Content-Type: application/zip"); 

    fpassthru($fp); 
} else { 
    redirect('domain.com/premium.html'); 
} 

但是我得到了內存耗盡的錯誤每次(該文件是4GB)。

是否有其他解決方法?

回答

3

你應該看看使用Apache mod_xsendfile而不是fopen。通過xsendfile,您可以通過HTTP頭與服務器上文件的路徑進行響應,Apache可以將該文件直接提供給用戶的瀏覽器,從而允許您的PHP腳本完成執行。

你可以找到入門mod_xsendfile這裏很大的指導作用:http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/

+1

谷歌搜索了很多,讀數看起來和聽起來完美,您的建議後歡呼。 – robjbrain 2010-11-05 14:32:31

+0

隨時。希望可以幫助你。 – andrewle 2010-11-05 21:02:34

0

從php文檔中的註釋。

同時加入CFLAGS = 「 - D_FILE_OFFSET_BITS = 64」 立即調用 「的./configure」 的PHP源將啓用大型文件(大於2 GB)使用fopen()函數的支持之前,請注意 - 如果PHP的這種安裝與Apache HTTPD [2.x]結合使用,即使不提供PHP應用程序的輸出,Apache也將變得完全無響應。

爲了在保持Apache可操作性的同時獲得對非Web應用程序的大文件支持,請考慮進行兩種不同的PHP安裝:一種在配置期間指定了上述CFLAGS(用於非Web使用),另一種則沒有這個標誌(用於Apache)。