我正在制作一个网站,您可以在其中购买虚拟积分的文件,然后下载它们。我不想让用户在不购买的情况下下载文件,所以我必须隐藏它们。我未经主机以外的任何人许可将所有文件放在一个文件夹中,问题是当有人购买文件并想要下载它时。
我决定制作一个文件获取器,它将检查用户的权限,然后打印出文件内容。到目前为止我的代码:
<?php
require_once('content/requirements.php'); //mysql connections
secure(1); //disconnect unlogged users
if (!isset($_GET['id'])) //if no file id provided
die();
$fid=mysql_real_escape_string($_GET['id']); //file id
$query="SELECT * FROM files WHERE user_id = "$_SESSION['user_id']." AND file_id = ".$id;
$q=mysql_query($query);
if (mysql_num_rows($q)!=1) //if no permission for file or multipe files returned
die();
$file=mysql_fetch_array($q); //file id
$sub=mysql_fetch_array(mysql_query("SELECT * FROM sub WHERE id = ".$file['file_id'])); //payment id
?>
现在,当我确定用户有权执行此操作时,phpScript 应该写入文件内容并发送适当的标头以让用户下载它。
如何逐字节读取文件并打印它,以及我应该在 header() 中写什么以使文件可下载(因此您不必复制粘贴其内容)。
也许这不是最好的方法,但这是我一段时间以来想到的最好的事情。
感谢任何帮助。
来自 Readfile PHP doc
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
谷歌上有很多可用的脚本,以下是一些链接:
http://www.tutorialchip.com/php-download-file-script
http://www.webinfopedia.com/php-file-download-script.html