我想用php建立电子商务网站,我将使用omnipay库进行支付。问题是如果网址 www.mywebsite.com/programs/paint.exe 中的文件用户可以在他的浏览器中写入url和付费程序将下载.....我搜索了如何阻止用户下载文件,如 RewriteEngine ,但如果用户在这种情况下付款,我该如何让文件下载?
答案 0 :(得分:1)
也许你可以试试这些:
www.mywebsite.com/programs/paint.exe
而不是像www.mywebsite.com/programs/ca63ff966ff272da14e4fc2e73fcd399
那样更好。您至少已将付费程序存储在表中,该表应提供其散列格式的名称列。www.mywebsite.com/programs/paint.exe
此网址应该且只能由经过身份验证的用户访问。如果已经过身份验证的用户,则检查此用户的购买历史记录,如果他/她曾购买此paint.exe
程序,如果没有他/她的购买记录,则必须将他/她重定向到您的付款页面。 答案 1 :(得分:0)
除了像Peter提到的那样使用散列文件名,你可以使用php在认证后提供文件。
创建一个htaccess重写,将任何文件请求直接发送到php脚本。在php脚本中,执行一些身份验证(I.E.让用户登录,或让他们使用设置会话变量的安全链接等)。然后,如果用户成功通过身份验证,请使用php使用http标头返回文件。
header('Content-Type: application/x-msdownload'); // Set this to a .exe
header('Content-Disposition: attachment; filename="paint.exe"'); // Set the filename to download.
$downloadFile = file_get_contents('programs/hashedpaintexename.exe');
echo $downloadFile;
注意:您需要确保在使用散列文件名时,您还希望htaccess处理这些散列文件。
另一个选择,如果您已经控制服务器这样做,那么您可以让PHP从网站目录之外加载文件,而不是使用htaccess重写。例如,如果您的网站目录是/var/www/mywebsite
,请php从/whatever/path/you/want
加载可执行文件,前提是php具有对该目录的读访问权。