Реализация контрольной панели загрузки проста и не требует дополнительного расширения PHP, JavaScript или Flash. Но вам нужен PHP 5.4 и новее.
Вам необходимо включить сбор информации о ходе загрузки, установив директиву session.upload_progress.enabled
на номер On
в php.ini
.
Затем добавьте скрытый ввод в форму для загрузки HTML только до любых других входных файлов. HTML-атрибут name
этого скрытого ввода должен быть таким же, как значение директивы session.upload_progress.name
от php.ini
(в конце концов предшествует session.upload_progress.prefix
). Атрибут value
зависит от вас, он будет использоваться как часть ключа сеанса.
HTML форма может выглядеть следующим образом:
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
<input type="file" name="file1" />
<input type="submit" />
</form>
Когда вы отправляете форму, PHP должен создать новый ключ в $_SESSION
суперглобальной структуре, которая будет заполняться информацией о состоянии загрузки. Ключ объединен name
и value
скрытого ввода.
В PHP вы можете взглянуть на информацию населенной загрузки:
var_dump($_SESSION[
ini_get('session.upload_progress.prefix')
.ini_get('session.upload_progress.name')
.'_myupload'
]);
Результат будет выглядеть так же, как следующее:
$_SESSION["upload_progress_myupload"] = array(
"start_time" => 1234567890, // The request time
"content_length" => 57343257, // POST content length
"bytes_processed" => 54321, // Amount of bytes received and processed
"done" => false, // true when the POST handler has finished, successfully or not
"files" => array(
0 => array(
"field_name" => "file1", // Name of the <input /> field
// The following 3 elements equals those in $_FILES
"name" => "filename.ext",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => false, // True when the POST handler has finished handling this file
"start_time" => 1234567890, // When this file has started to be processed
"bytes_processed" => 54321, // Number of bytes received and processed for this file
)
)
);
Существует вся информация, необходимая для создания индикатора выполнения - у вас есть информация, если загрузка все еще продолжается, информация о том, сколько байтов будет передано в общей сложности и сколько байтов уже было перенесено.
Чтобы представить процесс загрузки пользователю, напишите еще один PHP-скрипт, кроме загружаемого, который будет смотреть только на информацию о загрузке в сеансе и возвращать ее в формате JSON, например. Этот скрипт можно вызывать периодически, например каждую секунду, используя AJAX и информацию, представленную пользователю.
Вы даже можете отменить загрузку, установив $_SESSION[$key]['cancel_upload']
на номер true
.
Для получения подробной информации, дополнительных настроек и комментариев пользователей см. PHP manual.
http: // stackoverflow.com/questions/10477135/simple-cross-browser-jquery-php-file-upload-with-progress-bar/10477249 # 10477249 –