Привет, появилась необходимость написать следующее, а голова что-то не думает, гугл не то советует... Итак, есть 1) несколько групп пользователей group_id = 1, group_id = 2 ... 2) есть для каждой группы прайс price1, price2... Задача -: 1. выдать каждому юзеру (при заходе на сайт) уникальную (в пределах группы) ссылку на прайс. 2. Не дать юзеру из одной группы скачать не свой прайс То есть для всез юзеров из группы 1 ссылка на прайс 1, для группы 2 прайс2 ... навоял следуюющее PHP: <?php if($customer_group_id == 2) { ?><a href="<?php echo "/price/price2.xlsx"; ?>">price2</a><?php } ?><?php if($customer_group_id == 3) { ?><a href="<?php echo "/price/price3.xlsx"; ?>">price3</a><?php } ?> Оно то работает как надо, но не соблюдается задача№2. Ни что не мешает вставить адрес прайса другой группы и скачать его. (предложил создавать уникальные названия прайсов типа sdf2323j30f.xls, но идею не поддержали). Пришел у выводу, что нужно писать форму и обработчик... HTML: <form action="/" method="post" enctype="text/plain"> <input type="hidden" value='<?php echo $group_id' /> <input type="submit" value="скачать прайс"/> </form> А вот с обработчиком ничего в голову не лезет. Не могу вспомнить функцию "отдачи файла" Выручайте)
Делать ссылку на обработчик в нем делать проверку по сессии и отправка файла браузеру Код: <?PHP // local file that should be send to the client $local_file = 'test-file.zip'; // filename that the user gets as default $download_file = 'your-download-name.zip'; // set the download rate limit (=> 20,5 kb/s) $download_rate = 20.5; if(file_exists($local_file) && is_file($local_file)) { // send headers header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($local_file)); header('Content-Disposition: filename='.$download_file); // flush content flush(); // open file stream $file = fopen($local_file, "r"); while(!feof($file)) { // send the current file part to the browser print fread($file, round($download_rate * 1024)); // flush the content to the browser flush(); // sleep one second sleep(1); } // close file stream fclose($file);} else { die('Error: The file '.$local_file.' does not exist!'); } ?>
Либо просто генерить временную ссылку с хешем на 10-20 секунд как летитбиты и прочие Но отправка через обработчик интереснее