Консультация № 161493
26.02.2009, 18:59
0.00 руб.
0 5 4
Уважаемые эксперты,

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

Обсуждение

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

Приложение:
$auth=0;
$un=$_SERVER['PHP_AUTH_USER'];
$pw=$_SERVER['PHP_AUTH_PW'];

if(($un=='username')&&($pw=='password'))$auth=1;

if($auth==0){
header("WWW-Authenticate: Basic realm="Download"");
header("HTTP/1.0 401 Unauthorized");
die("Я Вас не знаю…\n");
};

$name='/path/to/files/'.$_REQUEST['filename'];
$fp = fopen($name, 'rb');

header("Content-type: application/octet-stream");//Чтобы гарантировать диалог сохранения

header("Content-Length: " . filesize($name));
fpassthru($fp);
Неизвестный
26.02.2009, 19:46
общий
это ответ
Здравствуйте, 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;
}
}

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

С уважением, Товарищ Бородин
давно
Советник
419
1011
26.02.2009, 20:39
общий
это ответ
Здравствуйте, 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, 21:48
общий
это ответ
Здравствуйте, Anjali!

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

Хорошилов Евгений:
+1
Форма ответа