Запрет на скачивание файла

  • Автор темы Автор темы Larson
  • Дата начала Дата начала

Larson

Новичок
Запрет на скачивание файла

Привет!
Есть вордивский файл file.doc, его можно скачивать. Можно ли сделать как нибудь, чтобы этот файл могли скачивать только зарегистрированные пользователи. Т.е. чел заходит на сайт, регистрируется, лазиет по сайту в разделе для зарегистрированных, нажимает на ссылку 'скачать' и ему отдается этот файл. Но ведь если какой-нибудь анрегистеред наберед в строке браузера путь к файлу, то он тоже может его скачать? Или нет?
 
файлы ложи в папки не доступные из web
и отдавай юзерам их через скрипт
проверяя в нем авторизацию
 
угу

либо средствами апачи чрез basic authentication
 
Автор оригинала: f1
файлы ложи в папки не доступные из web
и отдавай юзерам их через скрипт
проверяя в нем авторизацию
Что-то я смутно представляю как это будет в IIS. Путь к файлу какой писать - относительный или абсолютный? А если относительный, то относительно чего?
 
Что-то я смутно представляю как это будет в IIS. Путь к файлу какой писать - относительный или абсолютный? А если относительный, то относительно чего?
Относительно твоего начальника :)

Файлы сайта у тебя лежат в папке c:\webroot
Так вот доковский документ ложи в папку c:\webdocs которая не тоступна через WEB.

а ссылка на документ будет такой http://mysite.ru/doc.php
содержание doc.php взято из соседнего топика :)
PHP:
<?php
$filename="c:\\webdocs\\file.doc";
header("Accept-Ranges: bytes");
header("Content-Length: ".filesize($filename));
header("Content-Type: x-application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");

$fp=fopen($filename,"rb");
if ($fp) fpassthru($fp);
flush();
?>
 
Да забыл сказать в doc.php проверяй зарегистрирован пользователь или нет.
 
Блин.
Беру вышенаписсанный пример, записываю под названием test.php, запускаю. А он как-то глючно работает - вылетает окно 'загрузка файла', а там такая строчка: 'загружается файл: test.php c localhost'.
Почему test.php, а не тот файл, который указан в $filename?
Иду дальше, нажимаю ОК, выбираю каталог, ОК - файл переписывается тот, который в $filename, НО к нему в конец добавляется несколько пробелов. Откуда они берутся?

Кто-нибудь знает как это исправить?
 
И еще, если закомментировать хидеры, то файл нормально читается и выводится в браузер.
 
<?php
$filename="file.doc";
$filepath="c:\webdocs\";
header("Content-Type: x-application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Length: ".(string)(filesize($filepath.$filename)));
$fp=fopen($filepath.$filename,"r");
fpassthru($fp);
?>

А так?
 
Автор оригинала: Chese
А так?
А так тоже не то. Т.е. в браузер он нормально выводится, а вот окно с предложением сохранить файл не выводится.

ЗЫ: Ну что делать-то????????:( :o
 
Попробуй написать так:

header('Content-Disposition: filename=\"$filename\"');
 
Зайди телнетом на свой вебсервер и запроси файл вручную и посмотри, какие он выдает заголовки. Например, я создал файлик test.doc с одной строкой its a test и сделал:

telnet xxx.xxx.xxx.xxx 80
GET http://www.blabla.ru/test.doc HTTP/1.0

HTTP/1.0 200 OK
Date: Tue, 24 Sep 2002 08:03:43 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.3 mod_ssl/2.8.10 OpenSSL/0.9.6g
Cache-Control: max-age=86400
Expires: Wed, 25 Sep 2002 08:03:43 GMT
Last-Modified: Tue, 24 Sep 2002 08:02:14 GMT
ETag: "e9905-b-3d901c06"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: application/msword
X-Cache: MISS from proxy.blabla.ru
Proxy-Connection: close

its a test

Ентер нажимать два раза после строки GET...
 
To Larson.
В теме СОХРАНИТЬ РИСУНОК я подымал этот вопрос.
Посмотри http://phpclub.net/talk/showthread.php?s=&threadid=23780&rand=16 возможно решишь свою проблу. По крайней мере рисунки и архивы скачиваются, надо только поменять расширение.
 
Посмотри вариант хэдэров здесь: http://phpclub.net/talk/showthread.php?s=&threadid=22989&rand=12

В клубе уже неоднократно обсуждалась тема вызывания диалога сохранения.

ЗЫ: файл, который содержит этот код, вызывается как .../download.php/<filename>, чтобы не было проблем с именем сохраняемого файла.
 
Ок.
Сделал так.
PHP:
$files = "app.zip";
$files_folder = "e:\\php\\";
$size = $files_folder . $files;
header("Content-Type: application/download; name=$files");
header("Content-Lenght:".filesize($size));
header("Content-Disposition: filename=$files");

$f = fopen($size, "rb");
$s = fread($f, filesize($size));
fclose($f);
echo $s;
Все заработало, протестировал под ИЕ, файл даунлодится, все имена совпадают, но почему-то в конец файла дописываются четыре лишних байта, имхо перевод строки.
Хотя zip'ы нормально распаковываются, несмотря на эти лишние байты.
Кто-нибудь знает откуда они беруться, и как это лечить?
 
Сверху