我有一个zip文件,用户只有在完成付款后才能访问该文件,并且我使用的是PayPal支付网关,所以我申请了下载链接只有在用户完成交易后才能看到的条件,但我的要求是,用户必须无法通过URL打开此zip文件,但一旦完成交易,用户就可以从我给出的链接下载文件.e Download Zip,我在godaddy上托管了我的网站。
<?php
session_start();
if(isset($_SESSION['item_name']) && $_SESSION['item_name']!=''){
if($_SESSION['item_name']=='Android Apps'){
?>
<a href="abc.com/rrr/online1_files.zip">Download Zip</a>
<?php }
} else{
header('Location: abc.com/rrr/form1.html');
}
?>
答案 0 :(得分:1)
在代码中使用以下方法。这样您就不需要将用户重定向到zip文件的真实URL。你可以从任何PHP脚本服务zip,例如您的付款确认页面可以重定向到具有随机令牌的脚本,该令牌在首次下载/时间后到期 -
//call this method for sending download file.
function sendDL($filename)
{
header("Content-length:".filesize($filename));
header('Content-Type: application/x-gzip'); // ZIP file
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="download.gz"');
header('Content-Transfer-Encoding: binary');
ob_end_clean(); //output buffer cleanup
_readfileChunked($filename);
}
function _readfileChunked($filename, $retbytes=true) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$cnt =0;
// $handle = fopen($filename, 'rb');
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
if ($retbytes) {
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status) {
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
}
考虑这些实用方法。从任何不推出任何其他脚本的脚本(即没有echo
),第一种方法可用于向用户发送文件。称之为
<?php
$dlToken = $_GET['dltoken'];
$filename = '/path/to/secret.file';
//Check if this dlToken is in database/memcache or not. and if yes its expired or not.
if($yes)
{
sendDL($filename);
}
else
{
sendNack();
}
function sendNack()
{
echo '___DATA_NOT_FOUND___'; //NOTICE this is the only echo in this script. and it means we are not sending the file after all.
//header("HTTP/1.0 404 Not Found");
exit();
}
//put the two methods there
function sendDL($filename)
{
//...
}
function _readfileChunked($filename, $retbytes=true)
{
//...
}
?>
在您提供下载链接的页面/脚本中。生成随机唯一标记。您可以使用uniqid或mt_rand或两者。将其与时间戳值一起保存在数据库中(您可以在上面提到的下载脚本中使用它来检查令牌是否已过期)。使用该令牌创建一个下载URL,如下所示
download.php?file=test.zip&token=the_unique_token×tamp=unix_timestamp