[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Индикптор загрузки на FTP
Andrey_1
Доброго всем времени суток.
Сделал загрузку файлов на ftp-сервер на основе этой статьи - http://www.internet-technologies.ru/articl...ticle_1707.html
Всё работает, но вот при загрузке больших файлов не видно процесса, т.е. я знаю что надо подождать отчёта, а user.....
Нужен какой-то прогресс-бар или просто хотя бы вывести сообщение типа "Ждите идёт загрузка", конечно индикатор лучше.
SlavaFr
Ну ты вроде сам ответил на свой вопрос. Осталось толко найти подходящий progressbar или взять готовый.
Например http://www.w3schools.com/howto/howto_js_progressbar.asp

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Andrey_1
Спасибо! Буду осваивать!
Andrey_1
Что-то не так делаю.
Прогресс бар появился, но он пробегает сам по себе, не зависимо от загрузки.
А внизу браузера висит ожидание ответа от сервера. Как то надо подключить к процессу. На мой взгляд надо сравнивать размер исходного файла и размер этого файла в конечной папке. Но как это сделать?
kaww
Цитата (Andrey_1 @ 16.08.2016 - 12:08)
А внизу браузера висит ожидание ответа от сервера.

Все верно. Ответ от сервера не придет пока скрипт не завершит работу, т.е. пока файл не будет загружен.
Видится два варианта решения задачи. Но в обоих случаях - это "параллельные" (ajax) запросы ко второму скрипту (например, check.php), чтобы узнать прогресс по загрузке.
Первый вариант:
скрипт check.php подключается к ftp серверу и делает ftp_size, чтобы получить размер файла, который загружается. Затем делает $progress = 100 / $originalFileSize * $ftpfileSize, где $originalFileSize - размер файла, который загружаем, $ftpfileSize - размер загруженного файла, который вернул ftp_size, $progress - процент загрузки.
Второй вариант:
В цикле частями читаешь файл $chunk = fread($f, $chunkSize);, затем загружаешь $chunk по ftp и во временный файл пишем процент загруженного. Параллельными запросами получаешь содержимое файла - это и будет прогресс загрузки.
Andrey_1
В принципе мне понятен первый вариант! но как создать (ajax) запросы? Т.е это такой же скрипт как js, только он будет возвращать значение $progress = 100 / $originalFileSize * $ftpfileSize. heck.php я могу создать, Но как его выполнять в цикле? или я не в ту сторону мыслю?
kaww
Andrey_1, да, это js скрипт, который периодически, пока прогресс не достиг 100, шлет запросы к скрипту check.php
Если используется jquery, то типа такого:
function uploadProgressChecker() {
$.get("check.php", function(data) {
console.log(data);
if(parseInt(data) < 100)
setTimeout(uploadProgressChecker, 500);
});
}

Эта функция будет делать запросы к check.php пока он возвращает число меньше 100, и записывать результат в консоль.
Andrey_1
Здесь data - это переменная $data ?
Andrey_1
Скрытый текст

function move() {
  var elem = document.getElementById("myBar");  
  var width = 0;
   $.get("check.php", function(data) {
  console.log(data);
  if(parseInt(data) < 100)
   elem.style.width =data + '%';
  document.getElementById("label").innerHTML =data * 1  + '%';
  setTimeout(uploadProgressChecker, 500);
}) };


не знаю js, но
Вот так правильно будет?
Andrey_1
function move() {
var elem = document.getElementById("myBar");
var width = 0;
$.get("check.php", function(data) {
console.log(data);
if(parseInt(data) < 100)
elem.style.width =data + '%';
document.getElementById("label").innerHTML =data * 1 + '%';
setTimeout(uploadProgressChecker, 500);
}) };
Andrey_1
Не правильно я сделал. Подскажите пожалуйста
мой progress.js , который работает.
Скрытый текст

function move() {
  var elem = document.getElementById("myBar"); 
  var width = 0;
  var id = setInterval(frame, 100);
  function frame() {
    if (width >= 100) {
      clearInterval(id);
    } else {
      width++;
      elem.style.width =width + '%';
      document.getElementById("label").innerHTML =width * 1  + '%';
    }
  }
}


как сюда прикрутить check_file.php и как передавать переменную date из check_file.php
kaww
Цитата (Andrey_1 @ 16.08.2016 - 17:55)
как сюда прикрутить check_file.php

function move() {
var elem = document.getElementById("myBar"),
label = document.getElementById("label");
function uploadProgressChecker() {
$.get("check.php", function(data) {
data = parseInt(data);
elem.style.width = data + '%';
label.innerHTML = data + '%'
if(data < 100)
setTimeout(uploadProgressChecker, 500);
});
}
}

Если нет jquery, то вместо $.get() используй https://learn.javascript.ru/ajax-xmlhttprequest
Цитата (Andrey_1 @ 16.08.2016 - 17:55)
как передавать переменную date из check_file.php

Просто выводи значение в check_file.php (но ничего больше, только одно число):
echo floor(100 / $originalFileSize * $ftpfileSize);
Andrey_1
Сделал. Но проблема сейчас в передаче данных в файл check.php . Т.е - имя файла исходящего, и путь и имя файла на ftp, Если COOKIE, то они появляются после загрузки файла, Если из формы $_POST, то нет этих данных в параметрах загрузки.

И второе, какой скрипт использовать и как принимать процент загрузки в php ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.