Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: скачивание только через скрипт

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
xhugo
Отправлено: 29 Июня, 2011 - 15:41:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




Допустим залит файл site/upload/test.rar
если перейти по тому адресу то скачаем мы его.
а нужно чтоб скачивание происходило только через свой скрипт(через него например).
это нужно для того чтобы избежать всякого скачивание, я например хочу сделать капчу чтобы скачать, а другой возьмет тупо перейдет по адресу site/upload/test.rar и скачает его, как это избежать?
 
 Top
OrmaJever Модератор
Отправлено: 29 Июня, 2011 - 15:43:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




readfile() и там ещё некоторые заголовки


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 29 Июня, 2011 - 15:52:03
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
xhugo
Отправлено: 29 Июня, 2011 - 15:53:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




ок. но как же избежать обычного скачивание потом? если например скачаем мы через скрипт, то узнаем настоящий адрес до файла
 
 Top
Coder1994
Отправлено: 29 Июня, 2011 - 15:58:27
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




xhugo пишет:
ок. но как же избежать обычного скачивание потом? если например скачаем мы через скрипт, то узнаем настоящий адрес до файла

PHP:
скопировать код в буфер обмена
  1. <?
  2. $fname = 'имя файла';
  3. $fsize=filesize('путь до файла/'.$fname);
  4. $fdown='secret/'.$fname;
  5.  
  6. // Установлена или нет переменная HTTP_RANGE
  7. if (getenv('HTTP_RANGE')=="") {
  8.   // Читать и отдавать файл от самого начала
  9.   $f=fopen($fdown, 'r');
  10.  
  11.   header("HTTP/1.1 200 OK");
  12.   header("Connection: close");
  13.   header("Content-Type: application/octet-stream");
  14.   header("Accept-Ranges: bytes");
  15.   header("Content-Disposition: Attachment; filename=".$fname);
  16.   header("Content-Length: ".$fsize);
  17.  
  18.   while (!feof($f)) {
  19.     if (connection_aborted()) {
  20.       fclose($f);
  21.       break;
  22.     }
  23.     echo fread($f, 500000); // Скорость отдачи в байтах, это примерно 500кб\с
  24.     sleep(1);
  25.   }
  26.   fclose($f);
  27. }
  28. else {
  29.   // Получить значение переменной HTTP_RANGE
  30.   preg_match ("/bytes=(\d+)-/", getenv('HTTP_RANGE'), $m);
  31.   $csize=$fsize-$m[1];  // Размер фрагмента
  32.   $p1=$fsize-$csize;    // Позиция, с которой начинать чтение файла
  33.   $p2=$fsize-1;         // Конец фрагмента
  34.  
  35.   $f=fopen($fdown, 'r');
  36.  
  37.   header("HTTP/1.1 206 Partial Content");
  38.   header("Connection: close");
  39.   header("Content-Type: application/octet-stream");
  40.   header("Accept-Ranges: bytes");
  41.   header("Content-Disposition: Attachment; filename=".$fname);
  42.   header("Content-Range: bytes ".$p1."-".$p2."/".$fsize);
  43.   header("Content-Length: ".$csize);
  44.  
  45.   fseek ($f, $p1);
  46.   while (!feof($f)) {
  47.     if (connection_aborted()) {
  48.       fclose($f);
  49.       break;
  50.     }
  51.     echo fread($f, 500000);
  52.     sleep(1);
  53.   }
  54.   fclose($f);
  55. }
  56. ?>

(Отредактировано автором: 29 Июня, 2011 - 16:00:37)

 
 Top
OrmaJever Модератор
Отправлено: 29 Июня, 2011 - 16:08:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




xhugo пишет:
ок. но как же избежать обычного скачивание потом? если например скачаем мы через скрипт, то узнаем настоящий адрес до файла

через .htaccess разрешить доступ к папке с файлами только с 127.0.0.1 (это сам скрипт) а всем остальным 403

(Отредактировано автором: 29 Июня, 2011 - 16:09:31)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июня, 2011 - 17:26:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




OrmaJever пишет:
только с 127.0.0.1 (это сам скрипт)
не совсем.
Можно (даже нужно) запретить вообще всем.
Скрипт не пострадает, отдавать будет.
Директивы .htaccess действуют только для запросов "извне", а "внутренние" обращения к файлам работают непосредственно с файловой системой и ограничиваются через chmod и chown..
 
 Top
xhugo
Отправлено: 29 Июня, 2011 - 17:35:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




Спасибо.
еще вопрос, как лучше хранить файлы, для каждого папку с рандомным именем создавать? чтобы не путать с одинаковых именем файлы или как лучше?
 
 Top
OrmaJever Модератор
Отправлено: 29 Июня, 2011 - 17:51:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Ну смотря какие файлы (насколько они разные), если только масивы то создать паппку а в неё ложить файлы со случайными именами, если файлы както можно сгрупировать то по папкам Улыбка
(Добавление)
В итоге всеровно должна быть одна папка (например files) и в ней все эти папки с категориями и файлы.
В files положить .htaccess

и всё


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июня, 2011 - 19:41:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Файлы можно хранить в папке с их реальными именами.
А отдавать их подставляя каждый раз рандомные имена, главное чтобы расширение у файлов оставалось "родным".
Браузеру без разницы какое имя файла вы ему предоставите в заголовке,
чтобы он принимаемый файл назвал этим именем в файловой системе пользователя.
(Добавление)
Как подводный камень - не будет поддержки догрузки файлов.
Т.к. каждая новая инициализация скрипта-загрузчика будет обзывать файл новым именем.
 
 Top
xhugo
Отправлено: 30 Июня, 2011 - 10:00:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




если использовать .htacces для закрытия,то значит не нужно уже защищать скрипт от инклуда? все равно получается не будет работать?
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Июня, 2011 - 12:24:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




xhugo пишет:
все равно получается не будет работать?
да,
Но если сервер не апач (или подобный), а nginx (в нем только chmod и chown, или рулить конфиг),
стоит на всякий случай для совместимости сделать и защиту по инклуду.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB