Barra di avanzamento caricamento Ajax di PHP

Conosco molto bene Javascript, AJAX e JQuery, e credo che una barra di avanzamento del caricamento possa essere creata usando PHP, AJAX e Javascript ecc.

Sono sorpreso di come ottenere la dimensione del caricamento (il che significa che ogni secondo che voglio sapere, quanto del file è caricato e quanto rimane, penso che dovrebbe essere ansible usando il file AJAX ecc.) Durante il caricamento è in corso.

Ecco il link al manuale PHP ma non l’ho capito: http://php.net/manual/en/session.upload-progress.php

C’è qualche altro metodo per mostrare la barra di avanzamento del caricamento usando PHP e AJAX ma senza l’uso di alcuna estensione esterna di PHP? Non ho accesso a php.ini

introduzione

Il documento PHP è molto dettagliato, dice

L’avanzamento del caricamento sarà disponibile nel superglobale $ _SESSION quando è in corso un caricamento e quando POST di una variabile con lo stesso nome dell’impostazione INI di session.upload_progress.name è impostata su. Quando PHP rileva tali richieste POST, popolerà una matrice in $ _SESSION, dove l’indice è un valore concatenato delle opzioni INI session.upload_progress.prefix e session.upload_progress.name. La chiave viene in genere recuperata leggendo queste impostazioni INI, ad es

Tutte le informazioni richieste sono tutte pronte nella denominazione della sessione PHP

  • ora di inizio
  • CONTENT_LENGTH
  • bytes_processed
  • Informazioni sui file (Supporta più)

Tutto ciò che serve è estrarre queste informazioni e visualizzarle nel modulo HTML.

Esempio di base

a.html

     

b.php

 session_start(); header('Content-type: application/json'); echo json_encode($_SESSION["upload_progress_upload"]); 

Esempio con avanzamento caricamento sessione PHP

Ecco una versione ottimizzata dal progresso della sessione Sessione PHP

JavaScript

 $('#fileupload').bind('fileuploadsend', function (e, data) { // This feature is only useful for browsers which rely on the iframe transport: if (data.dataType.substr(0, 6) === 'iframe') { // Set PHP's session.upload_progress.name value: var progressObj = { name: 'PHP_SESSION_UPLOAD_PROGRESS', value: (new Date()).getTime() // pseudo unique ID }; data.formData.push(progressObj); // Start the progress polling: data.context.data('interval', setInterval(function () { $.get('progress.php', $.param([progressObj]), function (result) { // Trigger a fileupload progress event, // using the result as progress data: e = document.createEvent('Event'); e.initEvent('progress', false, true); $.extend(e, result); $('#fileupload').data('fileupload')._onProgress(e, data); }, 'json'); }, 1000)); // poll every second } }).bind('fileuploadalways', function (e, data) { clearInterval(data.context.data('interval')); }); 

progress.php

 $s = $_SESSION['upload_progress_'.intval($_GET['PHP_SESSION_UPLOAD_PROGRESS'])]; $progress = array( 'lengthComputable' => true, 'loaded' => $s['bytes_processed'], 'total' => $s['content_length'] ); echo json_encode($progress); 

Altri esempi

  • Monitoraggio dell’avanzamento del caricamento con PHP e JavaScript
  • PHP-5.4-Carica-Progress-Example

Questo è il mio codice funziona perfettamente Provalo:

URL demo

http://codesolution.in/dev/jQuery/file_upload_with_progressbar/

Prova questo codice qui sotto: –

questo è il mio codice html

   File Upload Progress Demo #1    

File Upload Progress Demo #1

<input type="file" name="myfile">

0%

Il mio codice file upload.php

  

Posso suggerire FileDrop .

L’ho usato per creare una barra di avanzamento, ed è piuttosto facile.

L’unico lato negativo che ho incontrato, è alcuni problemi con grandi quantità di dati, perché non sembra cancellare vecchi file – può essere risolto manualmente.

Non scritto come JQuery, ma è comunque carino, e l’autore risponde alle domande abbastanza velocemente.

Anche se può essere divertente scrivere il codice per una barra di avanzamento, perché non scegliere un’implementazione esistente. Andrew Valums ne ha scritto uno eccellente e puoi trovarlo qui:

http://fineuploader.com/

Lo uso in tutti i miei progetti e funziona come un fascino.

Prima di tutto, assicurati di aver installato PHP 5.4 sul tuo computer. Non hai taggato php-5.4 quindi non lo so. Controllare chiamando echo phpversion(); (o php -v dalla riga di comando).

Ad ogni modo, assumendo che tu abbia la versione corretta, devi essere in grado di impostare i valori corretti nel file php.ini . Dal momento che dici di non poterlo fare, non vale la pena di lanciarmi in una spiegazione su come farlo.

Come soluzione alternativa, usa un uploader di oggetti Flash.

XMLHTTPREQUSET2

 var xhr = new XMLHttpRequest(); xhr.open('GET', 'video.avi', true); xhr.responseType = 'blob'; xhr.onload = function(e) { if (this.status == 200) { var blob = this.response; /* var img = document.createElement('img'); img.onload = function(e) { window.URL.revokeObjectURL(img.src); // Clean up after yourself. }; img.src = window.URL.createObjectURL(blob); document.body.appendChild(img); /*...*/ } }; xhr.addEventListener("progress", updateProgress, false); xhr.send(); function updateProgress (oEvent) { if (oEvent.lengthComputable) { var percentComplete = oEvent.loaded / oEvent.total; console.log(percentComplete) } else { // Unable to compute progress information since the total size is unknown } }