Die Implementierung des Upload-Fortschrittsbalkens ist einfach und erfordert keine zusätzliche PHP-Erweiterung, JavaScript oder Flash. Aber Sie müssen PHP 5.4 und höher .
Sie müssen das Sammeln der Upload-Fortschrittsinformationen aktivieren, indem Sie die Direktive session.upload_progress.enabled
auf On
in setzen php.ini
.
Fügen Sie dann dem HTML-Upload-Formular unmittelbar vor allen anderen Dateieingaben eine versteckte Eingabe hinzu . Das HTML-Attribut name
dieser versteckten Eingabe sollte mit dem Wert der Direktive session.upload_progress.name
von php.ini
(eventuell vorangestellt session.upload_progress.prefix
) identisch sein . Das value
Attribut liegt bei Ihnen, es wird als Teil des Sitzungsschlüssels verwendet.
Das HTML-Formular könnte folgendermaßen aussehen:
<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>
Wenn Sie dieses Formular senden, sollte PHP einen neuen Schlüssel in der $_SESSION
superglobalen Struktur erstellen, der mit den Upload-Statusinformationen gefüllt wird. Der Schlüssel ist verkettet name
und value
von der verborgenen Eingabe.
In PHP können Sie sich die ausgefüllten Upload-Informationen ansehen:
var_dump($_SESSION[
ini_get('session.upload_progress.prefix')
.ini_get('session.upload_progress.name')
.'_myupload'
]);
Die Ausgabe sieht ähnlich aus wie folgt:
$_SESSION["upload_progress_myupload"] = array(
"start_time" => 1234567890,
"content_length" => 57343257,
"bytes_processed" => 54321,
"done" => false,
"files" => array(
0 => array(
"field_name" => "file1",
"name" => "filename.ext",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => false,
"start_time" => 1234567890,
"bytes_processed" => 54321,
)
)
);
Es gibt alle Informationen, die zum Erstellen eines Fortschrittsbalkens erforderlich sind. Sie haben die Informationen, wenn der Upload noch ausgeführt wird, die Informationen darüber, wie viele Bytes insgesamt übertragen werden sollen und wie viele Bytes bereits übertragen wurden.
Um dem Benutzer den Upload-Fortschritt zu präsentieren, schreiben Sie ein anderes PHP-Skript als das Upload-Skript, das nur die Upload-Informationen in der Sitzung betrachtet und sie beispielsweise im JSON-Format zurückgibt. Dieses Skript kann regelmäßig, beispielsweise jede Sekunde, mithilfe von AJAX und Informationen, die dem Benutzer angezeigt werden, aufgerufen werden.
Sie sind sogar in der Lage , den Upload abbrechen , indem Sie die Einstellung $_SESSION[$key]['cancel_upload']
auf true
.
Detaillierte Informationen, zusätzliche Einstellungen und Benutzerkommentare finden Sie im PHP-Handbuch .