Консультация онлайн # 161493

Раздел: PHP / Perl / Python
Автор вопроса: Anjali
Дата: 26.02.2009, 18:59 Консультация неактивна
Поступило ответов: 4
Уважаемые эксперты,

подскажите, пожалуйста, что нужно вставить в код страницы, чтобы при клике по ссылке на скачивание файла запрашивался пароль (один и тот же для всех файлов - это страничка маленькой библиотеки, буквально десяток отсканированных книг, на некоторые из которых их авторы просят поставить пароль).
На всю страницу пароль ставить не хотелось бы.

Ответ # 1, PVS@Lviv (Посетитель)

Здравствуйте, Anjali!
Можно придумывать что-то на JavaScripte, но самый очевидный способ: сделать закачку не прямую, а через скрипт авторизации. Что-то типа того, что в приложении:

Приложение:


PVS@Lviv

Посетитель
26.02.2009, 19:15
Нет оценки ответа

Ответ # 2, Товарищ Бородин (Посетитель)

Здравствуйте, Anjali!
Не знаю, при чем здесь Javascript. Возможно, коллега хотел предложить Вам сделать авторизацию с помощью Ajax, но я думаю, что это Вам не подходит. Все и проще, и сложнее.
Давайте попробуем такой серверный вариант.

1) убедитесь, что на сервере поддерживаются файлы .htaccess. Если они доступны, то тогда следует вставить в файл такую строку

RewriteEngine On
RewriteRule \.pdf$ script.php

Поясняю, что Вы таким образом сделаете. Предположим, что скачиваемые файлы имеют расширение pdf и лежат в какой-либо папке. Тогда при попытке скачать этот файл, Вы переадресовываетесь на PHP-скрипт script.php, который запросит пароль, если нужно. Кладете в папку .htaccess с вышеуказанным кодом, и в этой же папке создаете файл script.php со следующим кодом:

2)
if (!isset($_POST['password']))
{
echo '<form method="post" action=""><input type="password" name="password" /><input type="submit" value="Вход" /></form>';
} else {
$filename = $_SERVER['REQUEST_URI'];
if (file_exists($filename))
{
$content = file_get_contents($filename);
header("Content-type: application/pdf");
echo $content;
}
}

Сразу предупреждаю - способ не очень хороший. Чтобы способ был очень хороший, о Вашем сервере надо знать больше. Ну и вообще, расклад весь надо более детально знать. Если что-то я не предугадал, сообщите в личку или мини-форум, я подправлю ответ.

С уважением, Товарищ Бородин

Товарищ Бородин

Посетитель
26.02.2009, 19:46
Нет оценки ответа

Ответ # 3, Евгений Иванов (Посетитель)

Здравствуйте, Anjali!

Иногда надо быстро временно закрыть доступ к сайту, а писать красивые вещи, перетаскивать проект в другой каталог - лень. А иногда просто надо сделать закрытую область. Для этого в апаче можно легко с помощью .htaccess файла устроить простую авторизацию. Для этого понадобится

* полный путь к проекту, например /home/data/virt15566/www.mysite.com/
* htpasswd программка, лежащая в апаче

Шаг 1 - заливаем в корень сайта .htaccess файл с таким содержанием

AuthType Basic
AuthName "Restricted area"
AuthUserFile /home/data/virt15566/www.mysite.com/.htpasswd
Require valid-user

Шаг 2 - генерируем содержание файла с помощью программки

c:\>cd C:\Program Files\EasyPHP 3.0\apache\bin
C:\Program Files\EasyPHP 3.0\apache\bin>htpasswd -nmb user pass>.htpasswd

В итоге получаем .htpasswd файл вида:

user:$apr1$r2zs21ge$V1CxOLm7r88XNYE0aaJKm.

(c) http://kurapov.name/technology/web/basic_auth_htaccess

Евгений Иванов

Посетитель
26.02.2009, 20:39
Нет оценки ответа

Ответ # 4, Хорошилов Евгений (Посетитель)

Здравствуйте, Anjali!

Я, конечно, может и нарушу общий поток мыслей... но в такой ситуации я бы воспользовался паролированием архива с документом. Но это если нет проблем с ограничением трафика хостингом.

Хорошилов Евгений

Посетитель
26.02.2009, 21:48
Нет оценки ответа

Мини-форум консультации # 161493

HookEst

178001

= общий =    27.02.2009, 02:34

на некоторые из которых их авторы просят поставить пароль).


Хорошилов Евгений:
+1
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.