- Автор темы
- #1
Есть простой скрипт благодаря которому можно отдавать файлы(не паля прямые линки на файлы) и осуществлять докачку файла(в случае дисконекта, например
Будет ли нормально работать такой метод для файлов размером по 1-2 гигибайта
PHP:
$fname=$_GET['fname']; // имя файла
$fsize = filesize('secret_data/'.$fname); // secret_data папка в которой лежат файлы
$fdown = 'secret_data/'.$fname;
// Установлена или нет переменная HTTP_RANGE
if (getenv('HTTP_RANGE') == "") {
// Читать и отдавать файл от самого начала
$f = fopen($fdown, 'r');
header("HTTP/1.1 200 OK");
header("Connection: close");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Content-Disposition: Attachment; filename=".$fname);
header("Content-Length: ".$fsize);
echo fread($f, $fsize);
}
fclose($f);
}
else {
// Получить значение переменной HTTP_RANGE
preg_match ("/bytes=(\d+)-/", getenv('HTTP_RANGE'), $m);
$csize = $fsize - $m[1]; // Размер фрагмента
$p1 = $fsize - $csize; // Позиция, с которой начинать чтение файла
$p2 = $fsize - 1; // Конец фрагмента
$f = fopen($fdown, 'r');
header("HTTP/1.1 206 Partial Content");
header("Connection: close");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Content-Disposition: Attachment; filename=".$fname);
header("Content-Range: bytes ".$p1."-".$p2."/".$fsize);
header("Content-Length: ".$csize);
fseek ($f, $p1);
echo fread($f, $csize);
fclose($f);
Будет ли нормально работать такой метод для файлов размером по 1-2 гигибайта