ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Как запретить прямое скачивания файлов с сервера?
  #1  
Старый 26.04.2010, 17:35
Аватар для ZnikiR
ZnikiR
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме:
798217

Репутация: 44
Отправить сообщение для ZnikiR с помощью ICQ
По умолчанию Как запретить прямое скачивания файлов с сервера?

Интересует система , которая выдает ссылку для скачивания каждому пользователю отдельно.
И делает невозможным прямое скачивание с сервака.
Короче я узнал это называется анитилич.

Короче хочу сделать следующее.
Пользователь вводит данные. сверяем с данными в mysql.
то он переходит на страницу скачки файла,которая действует с этого момента 2 часа.

Пожалуйста как запретить прямой доступ к файлу,а выдавать его через php скрипт?
Ну с использованием htaccess

Последний раз редактировалось ZnikiR; 26.04.2010 в 19:07..
 
Ответить с цитированием

  #2  
Старый 26.04.2010, 20:02
Аватар для XPYMGT
XPYMGT
Познающий
Регистрация: 11.04.2009
Сообщений: 47
Провел на форуме:
116295

Репутация: 2
По умолчанию

На папку с файлами ставишь дени фром лол, а сами файлы для скачки считываешь в бинарном режиме отправляешь заголовки и выводишь в браузер
 
Ответить с цитированием

  #3  
Старый 26.04.2010, 20:27
Аватар для ZnikiR
ZnikiR
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме:
798217

Репутация: 44
Отправить сообщение для ZnikiR с помощью ICQ
По умолчанию

1)как много это будет хавать ресурсов?
2)Пример можно в студию (а то у меня опыта работы с htaccess вообще нет)
вот я нашел тут скрипт,но он печает содержимое страницы.
а как сделать чтобы он давал на сохранение?
PHP код:
<?php



// Настройки

$antiurl "sup.local";               // Разрешённые сайты (referer).
$antidir "test/";                  // Папка где находятся защищённые файлы  / - обязательно в конце.
$logfile "log.htm";              // Eсли хотите вести лог удалите // перед строкой. Файл логов (должен быть html или htm и обязательно CHMOD 777.


// Логи

if (isset($logfile)) {
if (!
file_exists($logfile)) die("Файл <font color='red'><b>$logfile</b></font> не найден!");
if (!
is_writable($logfile)) die("Для файла <font color='red'><b>$logfile</b></font> нужно зделать CHMOD 777!");
$cnr_date date("l d F H:i:s");
$cnr_counter $logfile;
$cnr_fp fopen($cnr_counter"a");
$cnr_hostname gethostbyaddr($_SERVER['REMOTE_ADDR']);
if (
$_SERVER['HTTP_REFERER'] == "")
$cnr_ref "BLOCKED"; } else { $cnr_ref "<a href=\"" $_SERVER['HTTP_REFERER'] . "\">" $_SERVER['HTTP_REFERER'] . "</a>";}
$cnr_data "<font color=\"green\">" $_SERVER['REMOTE_ADDR'] . "</font> HOST <font color=\"red\">" $cnr_hostname "</font> visited on " $cnr_date " linked by " $cnr_ref " <br>";
fputs($cnr_fp$cnr_data);
fclose($cnr_fp); }

// Проверка реферера



if (is_numeric($_GET["down"]))
{
/************НАЧАЛО ФАЙЛОВ***************************************************************************/

    // Здесь идут файлы для скачивания

    
if ($_GET["down"] == 1)
        
$filename "test.rar";



/************КОНЕЦ ФАЙЛОВ***************************************************************************/

    //Находим окончание файла

    
$splitexplode("."$filename);
    
$textcountsubstr_count($filename".")+1//
    
$ttype =$split[$nextcount];

    
// Создается ссылка на файл

    
$path $antidir $filename ;


    
// Проверка файла есть он или нет

    
if (!file_exists($path)) {

        echo 
"Файл '$filename' не существует.";
        echo 
$c;
        exit;                }

    
$ftime date("D, d M Y H:i:s T"filemtime($path));

}
  
    
// Проверка


    
if (isset($_GET['down']) && isset($filename)) {

    
$fsize filesize($path);
    
$ftime date("D, d M Y H:i:s T"filemtime($path));
    
$fd = @fopen($path"rb");
    if (!
$fd){
      
header ("HTTP/1.0 403 Forbidden");
      exit;
    }


    if (
$HTTP_SERVER_VARS["HTTP_RANGE"]) {
      
$range $HTTP_SERVER_VARS["HTTP_RANGE"];
      
$range str_replace("bytes="""$range);
      
$range str_replace("-"""$range);
      if (
$range) {fseek($fd$range);}
    }
    
$content fread($fdfilesize($path));
    
fclose($fd);
    if (
$range) {
      
header("HTTP/1.1 206 Partial Content");
    }
    else {
      
header("HTTP/1.1 200 OK");
    }
    
header("Content-Disposition: attachment; filename=" basename($path));
    
header("Last-Modified: $ftime");
    
header("Accept-Ranges: bytes");
    
header("Content-Length: ".($fsize-$range));
    
header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
    
header("Content-type: application/octet-stream");
    print 
$content;
    exit;

    } else { echo 
"Недействительный файл."; echo $c; } 


 exit;

?>

Последний раз редактировалось ZnikiR; 26.04.2010 в 20:33..
 
Ответить с цитированием

  #4  
Старый 26.04.2010, 23:05
Аватар для XPYMGT
XPYMGT
Познающий
Регистрация: 11.04.2009
Сообщений: 47
Провел на форуме:
116295

Репутация: 2
По умолчанию

Код не смотрел по 4 кб в цикле читаешь и выводишь, итого расход памяти: 250кб с хуем + 4 кб.

order allow,deny
deny from all

В папку с файлами.
Название всех файлов в базе. Скачка download.php?id=xxx, в базе смотрим название файла... Вообщем долго рассказывать, посмотри функции для работы с файловой системой.
 
Ответить с цитированием

  #5  
Старый 27.04.2010, 11:12
Аватар для dr.Web
dr.Web
Участник форума
Регистрация: 02.02.2009
Сообщений: 146
Провел на форуме:
1093500

Репутация: 43
Отправить сообщение для dr.Web с помощью ICQ
По умолчанию

дени фром олл.а если нужна скачка то создаёшь php файлик с содержанием


<?php
header('Content-type: file');
header('Content-Disposition: attachment; filename="$_REQUEST[file]"');
readfile("$_REQUEST['file']");
?>

вызываешь его вот так

http://site.ru/script.php?file=index.php

предложит скачать файл индекс
 
Ответить с цитированием

  #6  
Старый 27.04.2010, 13:44
Аватар для XPYMGT
XPYMGT
Познающий
Регистрация: 11.04.2009
Сообщений: 47
Провел на форуме:
116295

Репутация: 2
По умолчанию

Цитата:
Сообщение от dr.Web  
дени фром олл.а если нужна скачка то создаёшь php файлик с содержанием


<?php
header('Content-type: file');
header('Content-Disposition: attachment; filename="$_REQUEST[file]"');
readfile("$_REQUEST['file']");
?>

вызываешь его вот так

http://site.ru/script.php?file=index.php

предложит скачать файл индекс
Угу, зачем плохому учишь?
 
Ответить с цитированием

  #7  
Старый 27.04.2010, 14:02
Аватар для Doom123
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме:
3941248

Репутация: 668


Отправить сообщение для Doom123 с помощью ICQ
По умолчанию

код выложил 440hz на форуме php.ru поддерживает докачку ...

PHP код:
<?php

/**
 * @author 440hz
 * @copyright 2007
 */
 
 
session_start();

require_once (
'includes/config.php');

if (isset(
$_GET['id'])) 
{
//ID файла в базе
    
if (isset($_SESSION['level']) && $_SESSION['level'] === '2'
    { 
// Проверка уровня пользователя

//Просим БД дать нам имя файла по его ID
        
$res $db->mysql_qw('SELECT `name`,`cat` FROM `video` WHERE `id`=?'$_GET['id']) or
            die();
        
$fetch $db->mysql_fetch($res);

        
// отдаваемое файло
        
$filename 'movie/' $fetch['cat'] . '/' $fetch['name'];

        
// есл файла нет
        
if (!file_exists($filename)) {
            
header("HTTP/1.0 404 Not Found");
            exit;
        }

        
// получим размер файла
        
$fsize filesize($filename);
        
// дата модификации файла для кеширования
        
$ftime date("D, d M Y H:i:s T"filemtime($filename));
        
// смещение от начала файла
        
$range 0;

        
// пробуем открыть
        
$handle = @fopen($filename"rb");

        
// если не удалось
        
if (!$handle) {
            
header("HTTP/1.0 403 Forbidden");
            exit;
        }

        
// Если запрашивающий агент поддерживает докачку
        
if ($_SERVER["HTTP_RANGE"]) {
            
$range $_SERVER["HTTP_RANGE"];
            
$range str_replace("bytes="""$range);
            
$range str_replace("-"""$range);
            
// смещаемся по файлу на нужное смещение
            
if ($range) {
                
fseek($handle$range);
            }
        }

        
// если есть смещение
        
if ($range) {
            
header("HTTP/1.1 206 Partial Content");
        } else {
            
header("HTTP/1.1 200 OK");
        }

        
header("Content-Disposition: attachment; filename=\"{$filename}\"");
        
header("Last-Modified: {$ftime}");
        
header("Content-Length: " . ($fsize $range));
        
header("Accept-Ranges: bytes");
        
header("Content-Range: bytes {$range}-" . ($fsize 1) . "/" $fsize);

        
// подправляем под IE что б не умничал
        
if (isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],
            
'MSIE'))
            
Header('Content-Type: application/force-download');
        else
            
Header('Content-Type: application/octet-stream');

        while (!
feof($handle)) {
            
$buf fread($handle512);
            print (
$buf);
        }

        
fclose($handle);

    } else {
        
header("HTTP/1.0 403 Forbidden");
        exit;
    }
} else {
    
header("HTTP/1.0 403 Forbidden");
    exit;
}

?>
 
Ответить с цитированием

  #8  
Старый 27.04.2010, 14:12
Аватар для Deathdreams
Deathdreams
Постоянный
Регистрация: 08.11.2008
Сообщений: 498
Провел на форуме:
2603363

Репутация: 278
Отправить сообщение для Deathdreams с помощью ICQ
По умолчанию

Код:
function downloadFile($filename, $mimetype='application/octet-stream') {
	if (!file_exists($filename)) die('Файл не найден');

	$from=$to=0; $cr=NULL;

	if (isset($_SERVER['HTTP_RANGE'])) {
		$range=substr($_SERVER['HTTP_RANGE'], strpos($_SERVER['HTTP_RANGE'], '=')+1);
		$from=strtok($range, '-');
		$to=strtok('/'); if ($to>0) $to++;
		if ($to) $to-=$from;
		header('HTTP/1.1 206 Partial Content');
		$cr='Content-Range: bytes ' . $from . '-' . (($to)?($to . '/' . $to+1):filesize($filename));
	} else	header('HTTP/1.1 200 Ok');

	$etag=md5($filename);
	$etag=substr($etag, 0, 8) . '-' . substr($etag, 8, 7) . '-' . substr($etag, 15, 8);
	header('ETag: "' . $etag . '"');

	header('Accept-Ranges: bytes');
	header('Content-Length: ' . (filesize($filename)-$to+$from));
	if ($cr) header($cr);

	header('Connection: close');
	header('Content-Type: ' . $mimetype);
	header('Last-Modified: ' . gmdate('r', filemtime($filename)));
	$f=fopen($filename, 'r');
	header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
	if ($from) fseek($f, $from, SEEK_SET);
	if (!isset($to) or empty($to)) {
		$size=filesize($filename)-$from;
	} else {
		$size=$to;
	}
	$downloaded=0;
	while(!feof($f) and !connection_status() and ($downloaded<$size)) {
		echo fread($f, 512000);
		$downloaded+=512000;
		ob_flush(); 
		flush();
	}
	fclose($f);
}
Функция закачки файла с поддержкой докачки.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Если ты попал... (записки бывалого программиста) ErrorNeo Статьи 73 29.05.2010 13:44
Ошибки Windows 2 SVipeR Windows 9 02.03.2009 19:28



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ