|
Тема
|
Download на файлове от логнат потребител
|
|
Автор | 3opo (Нерегистриран) |
Публикувано | 20.03.06 14:42 |
|
Здравейте имам следният проблем:
Имам файлове за Download, които са достъпни само след логин на потребител.
В момента файловете се извикват, като линк. С други думи, ако някой знае пътя до файла, не му е нужно да се логва, за да го запише.
Моля предложете ми как мога да реша този проблем.
За сега имам само следното решение:
<?php
$filename = 'html.html';
$file_extension = strtolower(substr(strrchr($filename,"."),1));
switch ($file_extension) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpe": case "jpeg":
case "jpg": $ctype="image/jpg"; break;
case "html": $ctype="text/html"; break;
case "htm": $ctype="text/html"; break;
default: $ctype="application/force-download";
}
if (!file_exists($filename)) {
die("NO FILE HERE");
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".@filesize($filename));
set_time_limit(0);
@readfile("$filename") or die("File not found.");
?>
Това решение ме устройва само частично защото:
1. Файловете не се отварят директно в браузера, ами се появява прозорец за Download.
2. Все още съществува вероятност някой да налучка пътя до файла и да си го дръпне от сървъра
3. Нямам представа дали това решение работи с всички браузъри.
| |
Тема
|
Re: Download на файлове от логнат потребител
[re: 3opo]
|
|
Автор |
Blake (извънземен) |
Публикувано | 20.03.06 16:04 |
|
решението е:
1. файловете да се на мират на място, недостъпно през браузъра (демек, някъде едно ниво над documentRoot-a)...
2. тегленето става през скрипт, който според подадено ИД или нещо от сорта, изчита целия файл и го праща на браузъра СЛЕД проверка къф е посетителя и дали има право въобще да тегли точно този файл
иначе горе-долу си се ориентирал, трябва да подадеш съответните хедъри, виж разгледай РТФМ-то, в секция header(), юзър коментите...
Just a genius
| |
Тема
|
Re: Download на файлове от логнат потребител
[re: Blake]
|
|
Автор | 3opo (Нерегистриран) |
Публикувано | 20.03.06 17:46 |
|
Хостинг доставчикът не предлага едно ниво над documentRoot-а.
Единствената възможност е да се манипулират правата на достъп до директорията или чрез .htaccess да се защити директорията с парола и потребителско име и чрез PHP да се достъпват файловете без да се изисква от логнатия потребител да въвежда отново парола и потребителско име.
Въпросът е как 
| |
Тема
|
Re: Download на файлове от логнат потребител
[re: 3opo]
|
|
Автор |
Blake (извънземен) |
Публикувано | 21.03.06 09:22 |
|
ми тогава си кръщаваш директорията например "asdkjfksdhfjsdhfkjshkfjas_1123_asasf", и слагаш файловете вътре...
тегленето става през скрипт, така че юзъра няма как да види път към съответния файл, т.е. имаш даунлоуд линк от сорта:
http://mysite.com/download.php?file=83
и само ти си знаеш, че файл 83 е бла-бла.мп3 примерно
Just a genius
| |
Тема
|
Re: Download на файлове от логнат потребител
[re: 3opo]
|
|
Автор |
konstanc (...) |
Публикувано | 21.03.06 14:39 |
|
.htaccess файла ти е 'deny from all', а readfile() си чете без проблеми от директорията защото е през файловата структура.
| |
Тема
|
Re: Download на файлове от логнат потребител
[re: konstanc]
|
|
Автор | 3opo (Нерегистриран) |
Публикувано | 21.03.06 16:12 |
|
Мрого благодаря konstanc! Само това не ми беше хрумнало
Сега всичко работи както трябва
| |
Тема
|
Re: Download на файлове от логнат потребител
[re: 3opo]
|
|
Автор |
Mopдpeд (seeker) |
Публикувано | 21.03.06 20:37 |
|
Абе не е добро решението, така не поддържаш резюм и т.н.
Генерираш случаен път към файла (включая директория), копираш го там, даваш линка на юзера (така уеб сървъра ще му го дава на части и т.н. както си иска)
Записваш в директорията му генериран .хтакцесс, така че само юзерското ип да може да чете файла
Записваш го в база данни, откъдето го чете периодично пускан скрипт, че да го избърше след един ден примерно.
... nothing that happens to Man is ever ...
| |
|
|
|
|