За последние 24 часа нас посетили 17998 программистов и 1650 роботов. Сейчас ищут 1757 программистов ...

Как проверить валидность и выдать файл на загрузку?

Тема в разделе "PHP для новичков", создана пользователем megapiz, 5 янв 2010.

  1. megapiz

    megapiz Активный пользователь

    С нами с:
    29 авг 2009
    Сообщения:
    11
    Симпатии:
    0
    на странице есть текстовое поле и кнопка скачать. в текстовое поле пользователь вводит пароль который известен
    и строго фиксирован. После нажатия на кнопку (если пароль правильный) необходимо выдать файл на скачку

    как реализовать - вроде элементарно - но не получается

    <form action="" method="POST">
    <input type="text" name="dolphins" id="dolphins"/>
    <input type="submit" name="submit" id="submit" value="Скачать" />
    </form>

    а как проверить валидность и выдать файл на загрузку - не понятно
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    В переменной $_POST['dolphins'] находится введенное значение его и проверяй на соответствие паролю.

    Отдать файл 2 способа:
    1) Тупо перенаправить на файл. Но тогда этот кто-то сможет дать прямую ссылку на файл (хотя если пароль строго фиксирован он может дать пароль).

    2) Формировать заголовки и выдавать файл.

    для заголовков (в том числе переадресация) - header
    отдать файл - google (кстати вторая ссылка на этот форум) и readfile (в том числе комментарии)
     
  3. megapiz

    megapiz Активный пользователь

    С нами с:
    29 авг 2009
    Сообщения:
    11
    Симпатии:
    0
    да, ссылка прямая - просто такой способ скачать файл для наглядности

    начинаю потихоньку разбиратся
    Код (Text):
    1. <form action="check.php" method="POST">
    в check.php - проверяю submit - если валидно то даю файл и редеректюсь обратно, не
    валидно просто редеректюсь
     
  4. megapiz

    megapiz Активный пользователь

    С нами с:
    29 авг 2009
    Сообщения:
    11
    Симпатии:
    0
    Код (Text):
    1.                 $file = 'demo.exe';
    2.                                    
    3.                     header('Content-Description: File Transfer');
    4.                     header('Content-Type: application/octet-stream');
    5.                     header('Content-Disposition: attachment; filename='. basename($file));
    6.                     header('Content-Transfer-Encoding: binary');
    7.                     header('Expires: 0');
    8.                     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    9.                     header('Pragma: public');
    10.                     header('Content-Length: ' . filesize($file));
    11.                     ob_clean();
    12.                     flush();
    13.                     readfile($file, true);
    14.                    
    15.                 exit;
    Всё работает только одно но - с путями косяк - $file = 'demo.exe'; - ок $file = '1/demo.exe'; - не ок
    и даже если абсолютный путь указать всеравно - не ок - как быть ?