Andrey_1
15.08.2016 - 05:09
Доброго всем времени суток.
Сделал загрузку файлов на ftp-сервер на основе этой статьи -
http://www.internet-technologies.ru/articl...ticle_1707.htmlВсё работает, но вот при загрузке больших файлов не видно процесса, т.е. я знаю что надо подождать отчёта, а user.....
Нужен какой-то прогресс-бар или просто хотя бы вывести сообщение типа "Ждите идёт загрузка", конечно индикатор лучше.
SlavaFr
15.08.2016 - 13:51
Ну ты вроде сам ответил на свой вопрос. Осталось толко найти подходящий progressbar или взять готовый.
Например
http://www.w3schools.com/howto/howto_js_progressbar.asp
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();
Andrey_1
16.08.2016 - 07:03
Спасибо! Буду осваивать!
Andrey_1
16.08.2016 - 09:08
Что-то не так делаю.
Прогресс бар появился, но он пробегает сам по себе, не зависимо от загрузки.
А внизу браузера висит ожидание ответа от сервера. Как то надо подключить к процессу. На мой взгляд надо сравнивать размер исходного файла и размер этого файла в конечной папке. Но как это сделать?
Цитата (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
16.08.2016 - 11:30
В принципе мне понятен первый вариант! но как создать (ajax) запросы? Т.е это такой же скрипт как js, только он будет возвращать значение $progress = 100 / $originalFileSize * $ftpfileSize. heck.php я могу создать, Но как его выполнять в цикле? или я не в ту сторону мыслю?
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
16.08.2016 - 12:36
Здесь data - это переменная $data ?
Andrey_1
16.08.2016 - 13:09
Скрытый текст |
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
16.08.2016 - 13:10
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
16.08.2016 - 14:55
Не правильно я сделал. Подскажите пожалуйста
мой 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
Цитата (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
17.08.2016 - 07:44
Сделал. Но проблема сейчас в передаче данных в файл check.php . Т.е - имя файла исходящего, и путь и имя файла на ftp, Если COOKIE, то они появляются после загрузки файла, Если из формы $_POST, то нет этих данных в параметрах загрузки.
И второе, какой скрипт использовать и как принимать процент загрузки в php ?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.