Progressbar при загрузке файла php

Progressbar при загрузке файла php

БлогNot. PHP: как показывать прогресс во время загрузки файла

PHP: как показывать прогресс во время загрузки файла

Всё в одном файле типа .php . Работает через JQuery с внешнего сайта. Проверил в XAMPP с PHP 8. Выгружает просто под именем filename.тип , но, думаю, легко доработать. Конечно, на очень маленьких файлах прогресс только «мелькнёт» и заметить его мы не успеем.

 'Пустая сессия'))); $p = (float)($_SESSION[$session_name]['bytes_processed'] * 100) / $_SESSION[$session_name]['content_length']; $p = round($p, 0); $ret['progress'] = $p; $ret['bytes_upload'] = $_SESSION[$session_name]['bytes_processed']; exit(json_encode($ret)); > if(isset($_POST["action"]) and $_POST["action"] == "cancel_upload") < $key = ini_get('session.upload_progress.name'); $session_name = ini_get("session.upload_progress.prefix") . $_POST[$key]; $_SESSION[$session_name]['cancel_upload'] = true; exit(json_encode($ret)); >if(isset($_POST["action"]) and $_POST["action"] == "upload_modpuck") < $file = $_FILES['upload_file']; if(empty($file['name'])) exit(json_encode(array('error' =>'Файл отсутствует'))); if($file['error'] != UPLOAD_ERR_OK) exit(json_encode(array('error' => 'Ошибка при загрузке: error '.$file['error']))); $ext = pathinfo($file['name'], PATHINFO_EXTENSION); if(!strlen($ext)) exit(json_encode(array('error' => 'Отсутствует расширение'))); $size = filesize($file['tmp_name']); if(!move_uploaded_file($file['tmp_name'], 'filename.'.$ext)) exit(json_encode(array('error' => 'Произошла ошибка при копировании'))); $ret['success'] = 'OK'; $ret['filesize'] = $size; $ret['filename'] = 'filename.'.$ext; exit(json_encode($ret)); > ?>      
" value="upload_file"> Отменить

06.06.2021, 16:11 [1328 просмотров]

Источник

Php+Ajax полоса загрузки ProgressBar

Php+Ajax полоса загрузки ProgressBar

Здравствуй уважаемый читатель блога LifeExample, ты знаешь, что такое ProgressBar? ProgressBar — это индикатор, который показывает скорость и процент выполнения любого процесса. ProgressBar также называют полосой загрузки, или индикатором загрузки. Обычно прогресс бар используют для отображения процесса скачивания или закачивания файлов, но существуют и другие способы применения. Почему то в интернете все ссылки связанные использованием ProgressBar на php, сводятся к загрузке файлов, неужели людям не нужно отслеживать процесс выполнения других задач? Например, таких как процент считывания XML файла, или процесс заполнения SQL таблицы данными. Немало важным индикатор отслеживания является и при работе с удаленным сервером.

Читайте также:  Css box shadow page

Недавно мне пришлось разработать грабер для одной фирмы. Грабер должен был: получить с сайта конкурентов, каталог продукции, сохранив структуру вложенности разделов. Так вот при частом обращении с чужому серверу, с целью получения кода страницы, для дальнейшего парсинга, уходит много времени, что влечет за собой появление ошибки выполнения сценария:

Fatal error: Maximum execution time of 30 seconds exceeded in …

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

Пишем PHP скрипт для полосы загрузки с использованием AJAX

Представим, что у нас есть объемный алгоритм, который обрабатывает информацию по частям, и назовем его условно «сложной задачей». Чтобы было понятно, представьте что информацией является разбитый на части файл, который нужно скачать с сервера.

Создавать ProgressBar мы будем последовательно, выполнив для этого 3 шага.

AJAX обработчик (Шаг 1)

Сразу скажу, что для корректной работы AJAX технологии нам понадобится, уже готовый скрипт: ajax.js , в задачи которого входит отправка запросов на сервер и ожидание ответа. На самом деле он не большой, и можно было бы описать его более подробно, но боюсь, что это сделает статью слишком длинной. О работе с AJAX я напишу подробнее в другой статье, а пока просто выложу код упомянутого выше скрипта:

function XmlHttp ( )
{
var xmlhttp ;
try { xmlhttp = new ActiveXObject ( «Msxml2.XMLHTTP» ) ; }
catch ( e )
{
try { xmlhttp = new ActiveXObject ( «Microsoft.XMLHTTP» ) ; }
catch ( E ) { xmlhttp = false ; }
}
if ( ! xmlhttp && typeof XMLHttpRequest != ‘undefined’ )
{
xmlhttp = new XMLHttpRequest ( ) ;
}
return xmlhttp ;
}

function ajax ( param )
{
if ( window. XMLHttpRequest ) req = new XmlHttp ( ) ;
send = «» ;
for ( var i in param. data ) send += i + «=» + param. data [ i ] + «&» ;
req. open ( «POST» , param. url , true ) ;
req. setRequestHeader ( «Content-Type» , «application/x-www-form-urlencoded» ) ;
req. send ( send ) ;
req. onreadystatechange = function ( )
{
if ( req. readyState == 4 && req. status == 200 ) //если ответ положительный
{
if ( param. success ) param. success ( req. responseText ) ;
}
}
}

И так, скачайте данный скрипт, и положите его в корневую папку вашего сайта, либо в ручную создайте пустой файл ajax.js и вставьте в него приведенный выше код.

Пишем скрипт PHP выполняющий «сложную задачу» (Шаг 2)

Вторым действием создадим скрипт index.php , который будет отвечать за вывод полосы загрузки на страницу, а также будет выполнять расчет «сложной задачи». В корневой папке сайта создайте пустой файл index.phр. Откройте его и вставьте следующий код:

session_start ( ) ; //открываем сессию для записи
if ( $_POST [ «difficult_task» ] ) {
$part = 231 ; //общее количество задач
$_SESSION [ ‘sucsess_part’ ] ++; //количество выполненных подзадач
echo floor ( ( $_SESSION [ ‘sucsess_part’ ] * 100 ) / $part ) ; //процент выполненния общей задачи
}
?>
else

Эта часть кода описывает процесс выполнения «сложной задачи», если интерпретировать ее на задачу скачивания файла, то переменная $part должна содержать количество частей разбитого файла. Счетчик уже скачанных частей должен храниться в сессии на сервере, поэтому сразу открываем ее для записи функцией session_start(), для того чтобы в дальнейшем увеличивать $_SESSION[‘sucsess_part’] на один, каждый раз при успешной закачке одной из частей файла. Функция floor() округляет выполненные проценты скачивания до целого числа в меньшую сторону.

Вот и весь скрипт расчета сложной задачи, конечно на практике данный скрипт разрастётся сотнями строк, но для общего примера хватит и данного кода. В принципе правильнее было бы выделить этот скрипт отдельно и обращаться к нему с html странички с помощью ajax.js, но т.к. он слишком мал, то будет понятнее включить обработчик «сложной задачи» непосредственно в код страницы.

Организация процесса обновления полосы загрузки и вывод её на страницу (3 шаг)

Код вывода HTML страницы и progressbar будет заключен между скобками else из предыдущего шага:

Скопируйте следующий кусок кода и вставьте его вместо многоточия.

Данный код выводит на страницу кнопку с названием ‘Выполнить сложную задачу’, при нажатии на которую запускается процесс обработки сложной задачи с использованием ajax запросов. В коде присутствуют комментарии, поэтому не стану их дублировать, просто советую внимательно посмотреть что там написанно.

Если вы все сделали правильно, то у вас в корне сайта должны лежать два файла: index.php и ajax.js, в противном случаем вы можете скачать их одним архивом.

Запустите index.php вы увидите кнопку ‘Выполнить сложную задачу’. Нажмите на нее, и синяя полоса загрузки начнет заполняться зеленым цветом.

php полоса загрузки progressbar

При достижении 100% вы увидите сообщение о успешном выполнении «сложной задачи».

progressbar_ajax

Помните о том, что счетчик выполнения хранится в сессии на стороне сервера, поэтому для того, чтобы вновь посмотреть работу скрипта вам нужно будет перезапустить браузер, либо дописать скрипт самостоятельно таким образом, чтобы сессия сбрасывалась при достижении 100% результата.

Сегодня в статье с ужасным названием php+ajax полоса загрузки progressbar
мы рассмотрели, очень полезный на мой взгляд, механизм отслеживания выполнения задачи в процентах с выводом графического индикатора. Полоса загрузки, или попросту progressbar, будет полезен при синхронизации данных, при скачивании или закачивании файлов, а также при удаленной работе с чужим сайтом.

Читайте также похожие статьи:

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Источник

Скрипт прогресс бара загрузки файлов PHP + jQuery

Многие веб мастера жаждут узнать, как написать скрипт прогресс бара для загрузки файлов. В этом уроке мы поделимся несколькими строками PHP и jQuery кода, и создадим красивый прогресс бар загрузки файлов. Получится очень красивый скрипт, не верите, смотрите демо, или скачайте исходники.

Скрипт прогресс бар загрузки файла PHP + jQuery

Чтобы запустить этот скрипт, вам необходимо установить PHP APC библиотеку. Если у вас PHP 5.4, то библиотеку устанавливать вовсе не нужно. Для дизайна странички, мы также будем использовать bootstrap CSS библиотеку, но на этом мы останавливаться не будем. Ведь целью урока является создание прогресс бара, а не дизайн.

Файлы скрипта прогресс бара

Рассмотрим фундаментальный код скрипта. Весь архив скрипта, вы сможете скачать в конце урока.

get_progress.php

Следующий PHP код, будет идентифицировать степень загрузки файла на серверной стороне.

index.php

Здесь производиться генерация основной формы загрузки файла. Помните, это только пример, прописывать правила валидации придется самому.

 > > ?> 
0%

JavaScript файл

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

  

Заключение

Наслаждайтесь! Вот простой скрипт прогресс бара загрузки файла с участием PHP и jQuery. Сложного ничего нет, единственное, требуется наличие APC библиотеки, если версия PHP ниже 5.4. Надеюсь, вам понравилось, рассчитываю на интерактив в комментариях.

Источник

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