Intereting Posts
PHP для чтения и анализа большого размера файла? Как установить отношения «Жестокое» принадлежит ЧЕРЕЗ другую модель в Laravel? zftool не ведет себя так, как ожидалось Проверить токен доступа к API Facebook и идентификатор пользователя через PHP SDK? как реализовать sha 512, md5 и солевое шифрование всего за один пароль Как выполнить действие каждые 5 результатов? Повторно ввести $ HTTP_POST_VARS в PHP 5.3 CODE – содержимое объекта изменяется после выполнения функции Преобразование SHA1 в обычную форму Передача строки Javascript в php String PHP Динамически получить полный Абсолютный URL-адрес для определенного файла, который будет включен в другие файлы Воспроизвести файл mp4 через php в HTML5 Video Tag в Chrome? xdebug не активирует точку останова Вызов API Google Адреса медленный в PHP / cURL по сравнению с браузером выборки, как ускорить работу? php Как запустить внешнюю программу – возникли проблемы с системой и exec

Загрузить – максимальное количество подключений для каждого пользователя?

У меня есть php-скрипт, который позволяет скачивать большие файлы с загрузкой.

Это отлично работает, но я ограничил загрузку с php-кодом до 200 кбит / с для каждого подключения.

Таким образом, менеджер загрузок Mozilla Firefox делает только одно соединение, а скорость составляет около 200 кбит / с, но Free-Download-Manager или JDownloader составляет от 2 до 4 соединений, и поэтому скачивание (200 Кбит / с * 2 или 4) = 400 до 800KB / с.

Как я могу остановить это и разрешить только одно подключение для каждого пользователя для загрузки этого файла?

A. Я думаю, первое, что для вас нужно отключить Content-Range .

14.16 Контент-диапазон

Заголовок объекта Content-Range отправляется с частичным сущностью-телом, чтобы указать, где в полном сущностном теле должно применяться частичное тело. Единицы диапазона определены в разделе 3.12.

Менеджер загрузки может загрузить один тон в двух или нескольких соединениях из-за диапазона. Если вы отключите это как download resume и multiple connections не могут быть сделаны в одном файле. они будут делать каждый запрос к файлу с самого начала

пример

 LoadModule headers_module modules/mod_headers.so Header set Accept-Ranges none RequestHeader unset Range 

Вы также должны посмотреть 14.35.1 байт-диапазоны

B. Введите сеансы загрузки.

Вы можете создать uniqid id для каждой загрузки и обслуживать его через страницу PHP. Если загрузка по-прежнему активна или была запрошена до того, как вы просто создали страницу

пример

 $realFile = "test.pdf"; $fakeFile = uniqid("file"); $uniqid = isset($_REQUEST['id']) ? $_REQUEST['id'] : null; if (empty($uniqid) || strlen($uniqid) < 20 || !ctype_xdigit($uniqid)) { die("Die! Die! Die! Stolen URL"); } $memcache = new \Memcache(); $memcache->connect('localhost', 11211); $runtime = (int) $memcache->get($uniqid); if ($runtime) { die("Die! Die! Die! You Multiple Down loader"); } else { header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Content-Transfer-Encoding: binary"); header("Content-disposition: attachment; filename=$fakeFile.pdf"); // header('Content-type: application/pdf'); header("Content-length: " . filesize($realFile)); readfile($realFile); $memcache->set($uniqid, 1); } 

Простой клиент

 $url = "a.php?id=" . bin2hex(mcrypt_create_iv(30, MCRYPT_DEV_URANDOM)); printf("<a href='%s'>Download Here</a>",$url); 

Он выдавал бы что-то вроде

 <a href='a.php?id=aed621be9d43b0349fcc0b942e84216bf5cd34bcae9b0e33b9d913cccd6e'>Download Here</a> 

Вам также необходимо сопоставить каждый идентификатор с конкретным файлом …