Загрузка по паролю

ast-ross

Новичок
Загрузка по паролю

HI ALL!
Уважаемые программисты, помогите, пожалуйста, решить тривиальную проблему:
- имеем php 4.3.3, apache 2.0.47 (php модулем), все под управлением масдая (win xp);
- Аунтификация пользователей по 401 коду;
- Файловый архив (туева хуча .zip-ов);
Необходимо сделать загрузку этих файлов невозможной без прохождения аунтификации.
Т.е. к примеру, если файлы храниться в файловой системе сервера, то получается что скачать файл можно без прохождения аунтификации (к примеру, в корневом каталоге, есть папка ./soft, где расположены zip), в этом случае достаточно набрать полный путь до zip - http://www.somesite.com/soft/somefile.zip, и файл естественно загрузится.

З.Ы. Аунтификация проходит из БД (логин, пасс)
 

young

Новичок
Первое что пришло в голову
Делаешь каталог /soft-hidden/
В котором в .htaccess просисываешь Deny From all
А /soft/ делаешь про помощи того же .htaccess скриптом в котором ты проверяешь аутентификацию, запрашиваемый файл и отдаешь его в случае необходимости
 

Фанат

oncle terrible
Команда форума
А можно еще красивше.
закрыть каталог хтаксессом с хтпассвордом с такими же логинами и паролями!
Тогда чел авторизуется скриптом, баузер будет слать логину с паролем и его пустит к файлу!

А скриптом-то отдавать файлы - геморрой...
 

ast-ross

Новичок
Ну да! получается дублирование данных... Вариант не приемлем. А что если zip-ы держать в муське? в бинарном виде? Это по ламерски?
 

young

Новичок
Это по ламерски?
Да, по ламмерски

Расскажываю подробней
1) Создаешь директорию /soft-hidden/
2) Валишь все свое секретное файло туда
3) В той же дире создаешь .htaccess и в нем пишешь Deny From All (эта штуковина запретит скачивать оттуда файло напрямую)
4) Создаешь файл софт
5) Рядом с ним в .htaccess пишешь
<Files ~ "^(soft)">
ForceType application/x-httpd-php
</Files>
(это заставит его воспринимать твой файлик как php скрипт)
6) Программеришь то что тебе надо в soft, так чтоо бы он отраьатывал запросы /soft/my.zip

Что не ясно??
 

Фанат

oncle terrible
Команда форума
насчет дублирования - это да, неудобно.
Но в апаче есть модуль mod_auth_mysql :)
Так будет красивее всего, но поскольку товарищу это осмыслить сложновато, то пусть отдает скриптом :)
http://xpoint.ru/forums/programming/PHP/faq.xhtml#187
 

ast-ross

Новичок
А какая разница что там будет написанно в soft? .htaccess все одно никому ничего не даст...
 

young

Новичок
ForceType application/x-httpd-php
Есть скрипт soft.
Он без расширения.
Совсем.
И метр Apache как-то не поймет, что это php-шный скрипт и его надо соотв. обработать
А эта сктрочка ему поможет :)
 

ast-ross

Новичок
на счет того что файл софт будет обрабатываться php я понимаю. но kоим образом этот файл может поmоч скачать зиповский архив из каталога запрещенного файлом htaccess?
 

Фанат

oncle terrible
Команда форума
Янг, ты мешаешь все в кучу.
Сначала надо бъяснить человеку сам принцип - как отдавать файл скриптом.
А потом уже придумывать всякие извращения.
Не самые удобные, кстати.
Самое простое приведено по ссылке, которую я дал.

арт.
Все просто.
пхп-скрипт может выдавать браузеру все, что угодно.
Это тебе известно?
Картинку может. Знаешь?
бинарный Файл может. Догадываешься?
Надо просто прочитать файл с _диска_ и отдать браузеру.
выдав нужные заголовки.
 

ast-ross

Новичок
А не проще тогда используя данный вариант папку софт вообще вынести за пределы домашней дирриктории сервера?
 

Фанат

oncle terrible
Команда форума
это остается на выбор твоей фантазии.
есл тебе лично проще - то смело так и делай.
 

KhasDenis

Guest
2 young

http://phpclub.net/talk/showthread....ighlight=Header
твой пример неработает у меня ...((

Parse error: parse error in /var/www/html/Denis/dl.php on line 30
это здесь -> header("ETag: "".$etag.""");

если ремирую эту строчку, получаю приглашение закачать файл dl.php .... после закачки и он пустой ....

использую урл ....
http://192.168.0.15/Denis/dl.php?cd=/home/denis/&fn=php.ini

что не так ?
 

KhasDenis

Guest
а так работает ....

$dir="/path/to/file/";
if (isset($_REQUEST["file"])) {
$file=$dir.$_REQUEST["file"];
header("Content-type: application/force-download");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($file));
header("Content-disposition: attachment; filename=\"".basename($file)."\"");
readfile("$file");
}

:)
 
Сверху