Скачивание файла через обработчик

Тема в разделе "PHP", создана пользователем zek24, 1 авг 2013.

  1. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    Привет,
    появилась необходимость написать следующее, а голова что-то не думает, гугл не то советует...
    Итак, есть
    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>
    А вот с обработчиком ничего в голову не лезет.
    Не могу вспомнить функцию "отдачи файла"
    Выручайте)
     
  2. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    890
  3. GaD

    GaD

    Регистрация:
    24 мар 2013
    Сообщения:
    59
    Симпатии:
    24
    Делать ссылку на обработчик в нем делать проверку по сессии и отправка файла браузеру
    Код:
    <?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!');
    }
    ?>
     
    LDSP нравится это.
  4. Allo

    Allo

    Регистрация:
    7 сен 2013
    Сообщения:
    0
    Симпатии:
    0
    еще можно просто генерировать уникальную ссылку для скачивания, для конкретного пользователя
     
  5. LDSP

    LDSP

    Регистрация:
    5 сен 2013
    Сообщения:
    30
    Симпатии:
    10
    Либо просто генерить временную ссылку с хешем на 10-20 секунд как летитбиты и прочие
    Но отправка через обработчик интереснее