Session-Upload-Fortschritt
Hinweis: Dieses Feature ist von PHP 5.4.0 an verfügbar.
Wenn die session.upload_progress.enabled Ini-Option aktiviert ist, kann PHP den Upload-Fortschritt der hochgeladenen Dateien verarbeiten. Die von PHP bereitgestellten Daten sind für den eigentlichen Upload-Vorgang nicht nutzbar. Um den Status des Uploads zu verarbeiten, muss die Anwendung eine POST-Anfrage an einen separaten Endpunkt (zum Beispiel via XHR) ausführen.
Der Upload-Fortschritt steht in der Superglobalen $_SESSION zur Verfügung, wenn der Upload-Vorgang stattfindet und wenn ein POST-Feld, mit dem in der Ini-Konfiguration session.upload_progress.name hinterlegten Namen, enthalten ist. Wenn PHP eine solche POST-Anfrage erkennt, wird ein Array mit Informationen in der $_SESSION hinterlegt. Die Information wird mit dem aus den Ini-Konfigurationen session.upload_progress.prefix und session.upload_progress.name zusammengesetzten Index gespeichert. Der Schlüssel wird dabei typischerweise aus den Ini-Konfigurationen zusammengesetzt, zum Beispiel:
<?php
$key = ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];
var_dump($_SESSION[$key]);
?>
Es ist auch möglich, den Upload-Vorgang, durch setzen des Session-Wertes
$_SESSION[$key]["cancel_upload"] auf TRUE
,
abzubrechen. Wenn mehrere Dateien in der gleichen
Anfrage übertragen werden, wird dabei nur die in der Verarbeitung befindliche Datei und
alle ausstehenden Dateien abgebrochen. Bereits erfolgreich übertragene Dateien werden nicht
entfernt. Wenn ein Upload auf diese Weise abgebrochen wird, enthält der error
Schlüssel des $_FILES Array den Wert
UPLOAD_ERR_EXTENSION
.
Die Ini-Konfigurationen session.upload_progress.freq und session.upload_progress.min_freq steuern, wie häufig die Upload-Fortschrittsinformationen neu berechnet werden sollen. Mit angemessenen Einstellungen bei diesen zwei Optionen ist der Aufwand für diese Funktion sehr gering.
Beispiel #1 Beispiel-Informationen
Beispiel für den Formularaufbau des Upload-Fortschritts.
<form action="upload.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" /> <input type="file" name="file1" /> <input type="file" name="file2" /> <input type="submit" /> </form>
Die gespeicherten Daten in der Session sehen wie folgt aus:
<?php
$_SESSION["upload_progress_123"] = array(
"start_time" => 1234567890, // Anfragezeitpunkt
"content_length" => 57343257, // POST Gesamtdatenmenge (in Bytes)
"bytes_processed" => 453489, // Menge der empfangenen und verabreiteten Daten (in Bytes)
"done" => false, // true, wenn die POST Datenverarbeitung beendet ist (erfolgreich oder nicht)
"files" => array(
0 => array(
"field_name" => "file1", // Name des <input/> Feldes
// Die nächsten drei Elemente entsprechen den Angaben in $_FILES
"name" => "foo.avi",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => true, // true wenn die POST Datenverarbeitung dieser Datei beendet ist
"start_time" => 1234567890, // Zeitpunkt, wann die Verarbeitung der Datei begonnen hat
"bytes_processed" => 57343250, // Menge der empfangenen und verarbeiteten Daten dieser Datei (in Bytes)
),
// Eine weitere, noch nicht Komplett hochgeladene Datei, der selben Anfrage
1 => array(
"field_name" => "file2",
"name" => "bar.avi",
"tmp_name" => NULL,
"error" => 0,
"done" => false,
"start_time" => 1234567899,
"bytes_processed" => 54554,
),
)
);
In der Anfrage des Servers muss Pufferung deaktiviert sein, damit dies richtig funktioniert. Server wie z.B. Nginx sind bekannt dafür, große Anfragen zu puffern.
Die Upload-Fortschrittsinformationen werden in die Session geschrieben, bevor irgendein Skript ausgeführt wird. Daher führt die Änderung des Session-Namens per ini_set() oder session_name() zu einer Session ohne die Upload-Fortschrittsinformationen.
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-session.upload-progress.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.