Php скорость загрузки файл

PHP как передавать POST большие файлы быстро?

Нужно закачивать на сайт видео файлы размер ну где то от 500 мб до 2 гб.
Сделана форма с dropzone чтобы передавать файлы с прогрессом
Дак вот, файлы 30 мб, жуть как долго едут. До 10-15 минут
Я даже боюсь пробовать туда пихать гиговые файлы.
В php ini настроил большие значения max upload, max post
Скажите как то можно ускорить загрузку? Или она зависит только от скорости доступа к серверу?
Тоесть тут никак не повлиять?
А то по фтп вроде шустро загружаются, ну не так чтоб шустро но быстрее чем через форму.

  • разбивать файл на чанки равной длины
  • загружать чанки параллельно на несколько разных суб.доменов (st1.example.com, st2.example.com . stN.example.com)
  • использовать http2 соединение
  • передавать файлы (и чанки в том числе) в бинарном виде

Если количество входных точек меньше чем количество чанков то на некоторые адреса будет несколько отправлений, желательно не переустанавливать соединение, а держать хотя бы keep-alive, а ещё лучше разобраться как передать данные после текущей отправки в текущее соединение.

  • сети между серверами и клиентом
  • пропускную способность веб-сервера
  • общую нагрузку на сервер
  • io диска куда складываются данные
  • со скоростью работы диска, может быть он сбоит и потерял 80% своей скорости
  • с загрузкой канала между сервером и клиентом
  • слишком много запросов к веб-серверу и он просто блокируется постоянно
  • браузер перегружен плагинами или слишком много js кода который убивает отзывчивость

Так же попробуйте отправить файл на другой сервер похожим образом и сравнить.

Более подробно про отправку файла чанками:

sendFile: function(file) < if (file.size >this.maxFileSize) < this.alert('Файл слишком большой!'); return false; >var fd = new FormData(); fd.append("file", file); // Создаем запрос var xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', context(, this.uploadProgress), false); xhr.onreadystatechange = context(, obj.uploadFinish); xhr.open('POST', this.handler); xhr.send(fd); >,

Тут мы видим xhr.send(fd), теперь идём в один из примеров, например https://learn.javascript.ru/xhr-resume и видим вариант с отправкой части файла:

var slice = file.slice(10, 100); // прочитать байты с 10-го по 99-й включительно xhr.send(slice); // . и отправить эти байты в запросе.

Источник

PHP — как ограничить скорости скачивания файла

Иногда нужно ограничить скорость загрузки файла. Хорошо — если есть возможность настроить это на веб-сервере — тогда все просто и ресурсов сервера будет потребляться меньше. Но, что делать если доступа к настройкам веб-сервера нет? Правильно — нужно писать свой костыль. И php нам поможет в этом.

Читайте также:  Как разукрасить html страницу

Есть сайт, который предоставляет файлы для загрузки. И мы хотим сделать ограничение скорости загрузки только для незарегистрированных пользователей, а для зарегистрированных пользователей нет никаких ограничений. Причина для ограничения скорости скачивания может быть и иной: пользователь, оплативший скачивание без ограничений — получает файл на максимальной скорости, а тот, кто пожадничал — будет скачивать очень медленно.

 // открываем файл на чтение $f = fopen($filename, 'rb'); if (isset($_SERVER['HTTP_RANGE'])) < // поддерживается ли докачка $range = $_SERVER['HTTP_RANGE']; $range = str_replace('bytes=', '', $range); $range = str_replace('-', '', $range); if ($range) fseek($f, $range); >// если есть смещение if ($range) < header($_SERVER['SERVER_PROTOCOL'].' 206 Partial Content'); >else < header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); >header( 'Last-Modified: '.date('D, d M Y H:i:s T', filemtime($filename)) ); header('Content-Length: '.($filesize-$range)); header('Accept-Ranges: bytes'); header('Content-Range: bytes '.$range.'-'.($filesize - 1).'/'.$filesize); header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="'.$filename.'"'); while( !feof($f) ) < echo fread($f, $speed); flush(); sleep(1); // засыпаем >// закрываем файл fclose($f); // удаляем информацию о соединении из БД mysql_query("DELETE FROM `sessions` WHERE `session_ip`='".$_SERVER['REMOTE_ADDR']."' LIMIT 1"); function is_already_download() < // проверяем на наличие соединений от пользователя $res = mysql_query("SELECT `session_ip` FROM `sessions` WHERE `session_ip`='".$_SERVER['REMOTE_ADDR']."' LIMIT 1"); if (mysql_num_rows($res)) < return true; >else < // если запись отсутствует, то добавляем mysql_query ("INSERT INTO `sessions` VALUES ('".$_SERVER['REMOTE_ADDR']."')"); return false; >> ?> 

В данном случае мы используем таблицу MySQL sessions, в которй всего одно поле — IP-адрес скачивающего. При наличии IP-адреса скачивающего в таблице отдаем true, в противном случае записываем его и отдаем false.

Источник

Ограничение скорости скачивания файлов средствами PHP

Иногда появляется необходимость ограничивать скорость скачивания файлов пользователями. Причин тому может быть множество (бесплатный и платный режимы, регистрация пользователя и т.д.), однако не всегда есть возможность приобрести сервер или настроить его должным образом. В данном топике предлагаю переложить задачу на плечи чистый PHP.

Функция:

function loadfile ($filename, $speed=false) < // содержимое функции ниже >

$filename — адрес файла, который собираемся отдавать.
$speed — скорость скачивания.

Убираем лимиты и ограничения, запускаем буферизацию вывода:

// лимит времени выполнения set_time_limit(0); // продолжаем выполнятся при отключении пользователя ignore_user_abort(true); // старт буферизации ob_start();

Собираем необходимые данные о файле:

// размер файла $filesize = filesize($filename); // время последнего изменения файла $filetime = gmdate('r', filemtime($filename)); // генерируем Etag $etag = md5($filename."=".$filesize." -")); // с какого байта начать часть $to = (integer)(strtok("-")); // каким байтом закончить // Отдаем заголовки header('HTTP/1.1 206 Partial Content'); header('Content-Range: bytes '.$from.'-'.($to-1).'/'.$filesize); > else < header('HTTP/1.1 200 Ok'); >// В случае, если клиент не передал информацию о первом последнем байте, то присвоим // самостоятельно. if ($to==0) $to = $filesize; if (empty($from)) $from = 0;

Ограничение потоков для одного пользователя:

Для того, чтобы пользователь скачивал файл с необходимой скоростью и не мог обойти ограничение при помощи программ обеспечивающих скачивание в несколько потоков, нам необходимо установить их лимит для одного посетителя. Для этого нам потребуется ввести дополнительную функцию, которая будет проверять наличие уже установленных соединений. В качестве СУБД предлагаю использовать MySQL.

Читайте также:  Создать меню html код

Итак, создаем таблицу. Так и назовем — `file_session`. В данном примере нам необходимо всего одно поле `session_ip` которое будет содержать IP-адрес скачивающего. При наличии необходимого IP в БД отдаем true, в противном случае записываем его и отдаем false.

function is_active_user($clear = false) < global $dbi; // это подключение к БД // проверяем на наличие соединений от пользователя $result = mysql_query ("SELECT `session_ip` FROM `file_session` WHERE `session_ip`='".$_SERVER['REMOTE_ADDR']."' LIMIT 1", $dbi); if (mysql_num_rows($result)) < // если установлено $clear, значит пользователь //разорвал соединение. Удаляем запись. if (!$clear) < return true; >else < mysql_query ("DELETE FROM `file_session` WHERE session_ip='".$_SERVER['REMOTE_ADDR']."' LIMIT 1", $dbi); >> else < // если запись отсутствует, то добавляем mysql_query ("INSERT INTO `file_session` VALUES ('".$_SERVER['REMOTE_ADDR']."')", $dbi); return false; >>

В последствии функцию можно модернизировать, добавив еще и проверку на залогиненность, наличие оплаты и т.д.

Отдаем файл:

// Отдаем заголовки header('ETag: "' . $etag . '"'); header('Accept-Ranges: bytes'); header('Content-Length: ' . ($filesize-$from)); header('Content-Type: application/octet-stream'); header('Last-Modified: ' . gmdate('r', filemtime($filename))); header('Content-Disposition: attachment; filename="' . $filename . '";'); // Проверяем, есть ли у пользователя // активные потоки is_active_user() // и не отключился ли он connection_status(). while(is_active_user() and !connection_status()) < // спим пока у пользователя есть активные потоки sleep(1); >// Открываем файл $f = fopen($filename, 'rb'); // Устанавливаем указатель а нужную позицию fseek($f, $from, SEEK_SET); // Устанавливаем общий объем части и объявляем переменную хранящую скачанный объем $size = $to - $from; $isready = 0; // Начинаем отдачу while(!feof($f) and !connection_status() and ($isready <$size)) < // Если ограничений нет, то считываем по 0.5 Мб и отдаем без задержек. // Установлено ограничение? Считываем и отдаем ровно столько, сколько установлено ограничением и засыпаем на 1 секунду. echo fread($f, !$speed?512000:$speed); // считываем и отдаем flush(); ob_flush(); // очищаем буфер и выводим пользователю if ($speed) sleep(1); // засыпаем $isready += !$speed?512000:$speed; // обновляем счетчик >// Закрываем файл fclose($f); // Удаляем информацию о соединении из БД is_active_user(true);

Вызов функции:

loadfile ("/files/moifilm.avi", 10240); // Скорость указываем в байтах

Итог:

Полный код и рабочий пример скачивания без ограничения и с ограничением в 10 Кб/сек — файл 1 Мб.

Источник

Проверка скорости загрузки php скриптов

Доброго времени суток! Народ как вывести на экран скорость загрузки страницы сайта либо php скрипта?

Заранее большое спасибо!

Ограничение скорости загрузки файла
Приветствую! Есть код, ограничивающий загрузку файла <?php $filename =.

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

Читайте также:  Все операторы условий php

Нубский вопрос по скорости загрузки скрипта
Здраствуйте! У меня вопрос: я замеряю время работы скрипта, и оно у меня, предположим, 0,01.

создание php скриптов
Какое есть ПО для написания скриптов PHP? Нужно к экзамену подготовить. Насколько я понял, скрипты.

Эксперт PHP

Лучший ответ

Сообщение было отмечено Inkvizzz как решение

Решение

$start = microtime(true); // Тут код, скорость которого нужно узнать echo 'Время генерации: ' . ( microtime(true) - $start ) . ' сек.';

Отладка PHP скриптов
Здраствуйте! Интересуют меня программы(для виндовс)для отладки php скриптов. В частности.

Проблема с запуском PHP скриптов
Привет всем, установил LAMP по данной инструкции на CentOS 6 .

исполнение скриптов по условию if в php
Нужно по условию if исполнить определённый скрипт по изменению блока, по результатам сёрфинга в.

Запуск скриптов php по расписанию и по событию
В общем наверное не в ту ветку форума пишу, но все таки возможно кто то сталкивался: Есть два.

Источник

Отображение скорости загрузки файла на сервера

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

Отображение загрузки с сервера
Доброго времени суток уважаемые форумчани! У меня на локальном сервере где-то в папке имеются.

Ограничение скорости загрузки файла
Здравствуйте, подскажите пожалуйста, как можно огр. скорость загрузки файла (php) ? Вот пример.

Ограничение скорости загрузки файла
Приветствую! Есть код, ограничивающий загрузку файла <?php $filename =.

Ограничение скорости загрузки файла по ftp
как мне реализовать ограничение скорости? вот мой код: private void DownLoadFromServer(String.

мне желательно готовый для вставки я нуб в кодинге(

Добавлено через 2 часа 45 минут
Помогите

Что бы создать настоящий прогресс бар, надо как то в браузере знать одно, самое главное:

Сколько байт файла file_name.ext отправлено на сервер.

Далее уже разруливать это скриптом и растягивать картинку прогрессбара в соответствии с этим значением раз в сек. Ничего особо сложного в этом нет.

На java script это вроде не возможно. Это как то делают с помощью флешевого языка Action Script. Честно, я в этом ничего не понимаю.

Вам надо гуглить где то так: «action script progress bar», «flash progress bar script».

PS. если у пользователя не будет установлен флеш-плагин в браузере, этот скрипт прогресс бар конечно же работать не будет.

Добавлено через 5 минут
Может быть можно и на java script это реализовать, хз

Источник

Оцените статью