Я создаю сайт, на котором вы можете покупать файлы для виртуальных точек, а затем загружать их. Я не хочу, чтобы пользователи загружали файлы, не покупая их, поэтому я должен их скрыть. Я помещаю все файлы в папку без разрешения для кого-либо, кроме хоста, проблема в том, что кто-то покупает файл и хочет его загрузить.
Я решил создать файл getter, который будет проверять права пользователя, а затем распечатать содержимое файла. Мой код:
<?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 ?>
Теперь, когда Im уверен, что пользователю разрешено это делать, phpScript должен записать содержимое файла и отправить соответствующий заголовок, чтобы пользователь мог его загрузить.
Как читать файл по байтам и печатать его, и что мне следует писать в header (), чтобы сделать файл загружаемым (так что вам не нужно копировать его содержимое).
Возможно, это не лучший способ сделать это, но это было лучшее, о чем я подумал.
Thanx для любой помощи.
из файла 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; }
В Google есть много сценариев, Ниже приведены несколько ссылок: