PHP 5.4 Datei-Upload mit Fortschrittsanzeige (Progressbar)

In PHP 5.4 ist es nun endlich möglich ohne Erweiterungen den Fortschritt eines Datei-Uploads zu ermitteln. Wie das gemacht wird, möchte ich euch heute gerne zeigen.

Bisher war man immer gezwungen Erweiterungen wie APC oder uploadprogress einzusetzen oder gar Flash zu verwenden. Dieses Spiel hat mit PHP 5.4 ein Ende.

Die aktuellen Informatien über den Forschritt des Uploades werden in der Session gespeichert. Der Client wird dann asynchron z.B. mit AJAX informiert. Dazu wird in einem Intervall (Polling) der PHP-Server abgefragt.

Es sind also PHP, HTML und Javascript Kenntnisse erforderlich.

Konfiguration:

Die grundsätzliche Konfiguration wird in der PHP.ini vorgenommen. Die einzelnen Punkte heißen:

1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
; Enable upload progress tracking in $_SESSION
; Default Value: On
; Development Value: On
; Production Value: On
; http://php.net/session.upload-progress.enabled
session.upload_progress.enabled = On

; Cleanup the progress information as soon as all POST data has been read
; (i.e. upload completed).
; Default Value: On
; Development Value: On
; Production Value: On
; http://php.net/session.upload-progress.cleanup
session.upload_progress.cleanup = On

; A prefix used for the upload progress key in $_SESSION
; Default Value: "upload_progress_"
; Development Value: "upload_progress_"
; Production Value: "upload_progress_"
; http://php.net/session.upload-progress.prefix
session.upload_progress.prefix = "upload_progress_"

; The index name (concatenated with the prefix) in $_SESSION
; containing the upload progress information
; Default Value: "PHP_SESSION_UPLOAD_PROGRESS"
; Development Value: "PHP_SESSION_UPLOAD_PROGRESS"
; Production Value: "PHP_SESSION_UPLOAD_PROGRESS"
; http://php.net/session.upload-progress.name
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"

; How frequently the upload progress should be updated.
; Given either in percentages (per-file), or in bytes
; Default Value: "1%"
; Development Value: "1%"
; Production Value: "1%"
; http://php.net/session.upload-progress.freq
session.upload_progress.freq =  "1%"

; The minimum delay between updates, in seconds
; Default Value: 1
; Development Value: 1
; Production Value: 1
; http://php.net/session.upload-progress.min-freq
session.upload_progress.min_freq = "1"

Wie man gut sehen kann, ist standardmäßig (Default) der Upload Progress eingeschaltet, so das wir eigentlich nichts ändern müssen. Für uns später sind nur die Optionen session.upload_progress.prefix und session.upload_progress.name wichtig. Da wir sie später auslesen müssen.

Aufbau der Session:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$_SESSION["upload_progress_test"] = array(
    "start_time" => 1234567890,   // The request time
    "content_length" => 57343257, // POST content länge
    "bytes_processed" => 453489,  // Anzahl der Bytes die empfangen und verarbeitet wurden
    "done" => false,              // true = POST ist beendet | false = POST läuft noch
    "files" => array(
        0 => array(
                "field_name" => "file1",       // Name of the <input/> field
                // The following 3 elements equals those in $_FILES
                "name" => "foo.avi",
                "tmp_name" => "/tmp/phpxxxxxx",
                "error" => 0,
                "done" => true,                // true = Datei ist hochgeladen | false = Datei wird noch hochgeladen
                "start_time" => 1234567890,    // Beginn der Verarbeitung dieser Datei
                "bytes_processed" => 57343250, // Anzahl der Bytes dieser Datei, die empfangen und verarbeitet wurden
        ),
    // Weiter Dateien in der gleichen Anfrage, die noch nicht beendet sind
        1 => array(
                "field_name" => "file2",
                "name" => "bar.avi",
                "tmp_name" => NULL,
                "error" => 0,
                "done" => false,
                "start_time" => 1234567899,
                "bytes_processed" => 54554,
        ),
    )
);
?>

Der Array-Index setzt sich aus der Option session.upload_progress.prefix und den Wert aus dem hidden Feld session.upload-progress.name. Dazu gleich mehr im Beispiel

Beispiel Anwendung:

index.php

Beginnen wir mit dem HTML Gerüst. Ich habe dies bewusst einfach gehalten, so das man das Prinzip gut versteht. Für die AJAX Kommunikation verwende ich jQuery + das Plugin Form, welches uns sehr einfach AJAX Uploads ermöglicht (über Iframe).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
    session_start();
?>
 
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>PHP 5.4 Datei-Upload mit Fortschrittanzeige</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="jquery.form.js"></script>
    <style>
        div    { padding:5px;    }        
        progress { margin:10px 0 10px 0; }
    </style>
</head>
 
<body>
    <article>
        <header>
            <h1>PHP 5.4 Datei-Upload mit Fortschrittanzeige</h1>
        </header>
 
        <section>
            <form action="upload.php" method="post" enctype="multipart/form-data" id="upload_form">
            <!--
                Dieses Feld ist wichtig. PHP benötigt dies für die Zuordnung.
                Der Wert (Value) ist für uns später wichtig um auf die globale $_SESSION zuzugreifen
            -->
                <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="test">
                <div>
                    <label for="datei1">Datei 1:</label>
                    <input type="file" name="file1" id="datei1">
                </div>
                <div>
                    <label for="datei2">Datei 2:</label>
                    <input type="file" name="file2" id="datei2">
                </div>
                <div>
                    <input name="upload_start" type="submit" value="Hochladen">
                    <input name="abbrechen" type="button" value="Abbrechen" id="abbrechen">
                </div>
            </form>
        </section>
 
        <section>
            <h2>Fortschritt:</h2>
            <div>
                <progress max="1" value="0" id="fortschritt"></progress>
                <p id="fortschritt_txt"></p>
            </div>
        </section>   
    </article>
 
    <script>
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
        var intervalID = 0;
 
        $(document).ready(function(e) {
 
            $('#upload_form').submit(function(e) {
 
                if($('#datei1').val() == '' && $('#datei2') == ''){
                    e.preventDefault(); //Event abbrechen
 
                    return false;
                }
 
                intervalID = setInterval(function() {
                    $.getJSON('fortschritt.php', function(data){
 
                        if(data)
                        {
                            $('#fortschritt').val(data.bytes_processed / data.content_length);
                            $('#fortschritt_txt').html('Fortschritt '+ Math.round((data.bytes_processed / data.content_length)*100) + '%');
                        }
                    });
                }, 1000); //Zeitintervall auf 1s setzen
 
                $('#upload_form').ajaxSubmit({    
                                                success: function()
                                                {
                                                    $('#fortschritt').val('1');
                                                    $('#fortschritt_txt').html('Fertig');
                                                    clearInterval(intervalID);    
                                                },                                                
                                                error:    function()
                                                {
                                                    $('#fortschritt').val('1');
                                                    $('#fortschritt_txt').html('Ein Fehler ist aufgetreten');
                                                    clearInterval(intervalID);    
                                                }
                                            });
                e.preventDefault(); //Event Abbrechen
 
            });
 
            $('#abbrechen').click(function(e) {
                $.ajax("fortschritt.php?cancel=true");
                $('#fortschritt').val('1');
                $('#fortschritt_txt').html('Upload abgebrochen');
 
                clearInterval(intervalID);
            });
        });
106
107
108
109
    </script>
 
</body>
</html>

Durch setInterval erzeugen wir ein polling auf dem Webserver, der jede Sekunge getriggert wird. In der Funktion wird die Seite fortschritt.php aufgerufen, welches im JSON Format uns den aktuellen Fortschritt des Uploades zurück gibt.

fortschritt.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
session_start();
 
/*
* Upload-Progress Prefix auslesen und mit Wert aus
* dem hidden Feld unseres Formulars ergänzen
*/
$progress_name = ini_get("session.upload_progress.prefix")."test";
 
/*
* Wenn Upload abgebrochen werden soll
*/
if(isset($_GET['cancel']) && $_GET['cancel'] == "true")
{
    /*
    * Bricht den Upload ab
    */
    $_SESSION[$progress_name]['cancel_upload'] = true;
 
    return;
}
 
if(isset($_SESSION[$progress_name]))
{
    /*
    * array in JSON umwandeln und zurück geben
    */
    echo json_encode($_SESSION[$progress_name]);
}
?>

upload.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
session_start();
 
/*
* Session-Upload-Progress ist leer
* durch die Option session.upload_progress.enabled = On
*/
var_dump($_SESSION);
 
/*
* Übliches Format von $_FILES
*/
var_dump($_FILES);
 
/*
* Wenn abgebrochen
*/
if($_FILES['error'] == UPLOAD_ERR_EXTENSION)
    echo "Datei abgebrochen";
?>

Getestet habe ich das Ganze unter Linux. Besser gesagt, unter Ubuntu mit dem Paket von damz.org. Unter Windows wollte es bei mir nicht funktionieren, was ich auf den PHP eigenen Webserver zurück schiebe. Unter Ubuntu hatte ich Apache2 mit PHP Modul eingesetzt.

Download

Alle Quellcode Dateien könnt ihr euch hier Downloaden: PHP 5.4 Datei Upload mit Fortschrittanzeige

 

Ich hoffe euch hat der Artikel gefallen. Wie immer bei Fragen oder Kritik stehe ich euch gern zur Seite.

 

Schlagwörter: , ,

42 Kommentare bisher »

  1. Roland Hentschel sagt

    am 14. Oktober 2012 @ 15:51

    Ich habe gerade mal Dein Script getestet (auf XAMPP unter Windows) – es hat mir zwar den Ladebalken gezeigt und den erfolgreichen Upload gemeldet, ohne aber irgend etwas hochgeladen zu haben.

    Hab‘ ich da was falsch gemacht ?

  2. admin sagt

    am 16. Oktober 2012 @ 13:06

    Hallo,

    nein du hast nichts falsch gemacht. Das Beispiel zeigt nur wie man das neue Konzept anwendet.
    Wenn du die Datei speichern möchtest, musst du in der Datei Upload.php folgendes ergänzen:

    move_uploaded_file($_FILES[‚file1‘][‚tmp_name‘], ‚upload/‘.$_FILES[‚file1′][’name‘]);

    Dabei wird die hochgeladene Datei, aus dem Inputfeld file1, im Ordner „upload“, mit dem Ursprünglichen Namen, gespeichert.

    Der Ordner „upload“ muss natürlich vorhanden sein.

    LG
    Julius

  3. Christian sagt

    am 16. Oktober 2012 @ 17:48

    Hi,
    danke für die Skripte, aber vielleicht bin ich ja zu doof 🙁
    Ich soll den Uploadvorgang in eine bestehende Seite einfügen. Jetzt hab ich die Pfade hingebogen und das ganze läuft soweit.
    Bis auf… also mein .js Sniplet sieht so aus:
    $(‚#fortschritt‘).val(‚1‘);
    $(‚#fortschritt_txt‘).html(‚Fertig‘);
    clearInterval(intervalID);

    $(„#upload_done_form“).submit(); <- das einzige, was ich an Logik geändert habe

    Ich will zurück auf meine bestehende Seite *und* die irgendwie die Werte aus der _FILES Variablen weiterverwursten… (daher auch der Versuch mit den Formular, wohl nicht der Königsweg)
    Aber wie komm ich zurück auf meine Seite und kann die _FILES Inhalte mitnehmen?

  4. admin sagt

    am 16. Oktober 2012 @ 22:38

    Hallo,

    so richtig versteh ich nicht was du meinst.

    Was soll $(„#upload_done_form“).submit(); ?

    Also du willst nach den erfolgreichen Upload, die Daten die von der Datei upload.php zurückgegeben werden, auswerten und auf deiner Seite anzeigen?

    Das kannst du wie folgt machen:

    In der index.php fügst du folgendes hinzu:

    Zeile 80: dataType:’json‘,
    Damit gibst du an das die response Daten vom Typ JSON sind.

    Zeile 81: success: function()
    änderst du in:
    success: function(data)

    Die Variable data enthält das JSON-Objekt.

    Zeile 84 (unter clearInterval): Dort kannst du nun das JSON-Objekt verarbeiten.
    z.B. alert(data.file1.name) -> Name der Datei wird ausgegeben.

    Die uploaded.php Datei muss dann so aussehen:

    ‚Upload wurde abgebrochen‘));
    } else {
    echo(json_encode($_FILES));
    }
    ?>

    Ich habe dieses Beispiel kann dir die Problematik näher bringen.

    LG
    Julius

  5. Christian sagt

    am 18. Oktober 2012 @ 16:50

    Funzt leider nicht:
    Ich hab die upload.php durch deine ersetzt, und das Javascript in der index geändert:

    $(‚#upload_form‘).ajaxSubmit({
    dataType:’json‘,
    success:function(data) {
    $(‚#fortschritt‘).val(‚1‘);
    $(‚#fortschritt_txt‘).html(‚Fertig‘);
    clearInterval(intervalID);
    alert(data.file1.name); },
    ..
    Aber anscheinend lauf ich immer in den Errorzweig, weil ich kein Alert erhalte, sondern nur das „Ein Fehler ist aufgetreten“

    Sorry, aber ich komme aus der Backendecke. Und mir ist eigentlich nicht klar, was wann aufgerufen wird (das fortschritt.php wohl während des eigentlichen Uploadvorgangs? Das upload.php nachdem der Upload fertig ist und der Output von upload landet dann in der data Variablen, die ich eingefügt habe?

    Und wenn das alles funktionieren würde, könnte ich dann die Daten aus data=$_FILES per javascript Formular weiter an ein php Skript geben?

  6. Christian sagt

    am 18. Oktober 2012 @ 17:29

    So, Kommando zurück.
    Jetzt krieg ich im Alert schon mal den Error und die Dateinamen, keine Ahnung, was vorher das Prob war…

  7. Christian sagt

    am 19. Oktober 2012 @ 11:19

    So, soweit bin ich durch, auch der Letzte kriegt’s mal hin.

    Mein einziges Prob ist noch, dass (im Gegensatz zu vorher ohne Fortschrittsanzeige) die PHP Fkt. is_uploaded_file ein false zurückgibt. Hast du eine Ahnung warum?

  8. admin sagt

    am 19. Oktober 2012 @ 15:39

    Hey,
    freut mich das es jetzt bei dir funktioniert.

    Wie hast du denn die Funktion is_uploaded_file aufgerufen?

    LG
    Julius

  9. Christian sagt

    am 19. Oktober 2012 @ 17:53

    Tja, genau das ist wohl das Prob:
    in der js success Funktion erzeuge ich ein Formular mit den ganzen $_FILES Informationen als hidden Felder und dann mache ich mit dem Submit Aufruf einen erneuten Aufruf der index.php und *erst dort* mache ich den eigentlichen File Upload. Und zu diesem Zeitpunkt erkennt PHP wohl nicht mehr, dass ein erfolgreicher und *erlaubter* Upload via HTTP-POST stattgefunden hat.
    Also muss wohl die ganze Logik ins uploaded.php wandern, ob ich will oder nicht.

  10. admin sagt

    am 19. Oktober 2012 @ 18:28

    Jup, so wie du es jetzt machst geht es nicht.
    Der Upload ist nur während der Ausfährung der upload.php gültig. Daher muss deine Geschäftslogik in die upload.php Datei.

    LG
    Julius

  11. Qrizz sagt

    am 23. November 2012 @ 18:18

    Hallo, kann man das Script auch nutzen um auf einen FTP-Server zu übertragen? Ich sehe in keiner Datei Felder, wo man den Server und Benutzername, Passwort eigeben kann ?

  12. admin sagt

    am 24. November 2012 @ 13:43

    Hallo,

    nein das geht leider nicht. Du könntest aber zunächst die Datei, mit diesem Skript, auf denen Server laden und danach diese mit PHP auf den FTP-Server laden. (http://php.net/manual/de/book.ftp.php)

    LG
    Julius

  13. Topper sagt

    am 29. November 2012 @ 17:53

    Wow, du bist echt genial! =)
    Und es funktioniert auch alles, wenn man die richtigen Klammern beim Upload-Ordner verwendet: ‚upload‘

    … wollte sagen Anführungszeichen. Die werden nämlich beim Posten umgewandelt.

    hmmm … leider zeigt der Fortschrittsbalke bei mir nur die 0 % oder erst ganz am Ende die 100 % an. Das hab ich jetzt erst durch das Hochladen einer größeren Datei bemerkt. Dazwischen passiert gar nichts und der Benutzer kann den Upload nicht erkennen. Liegt das dann am Server und der php.ini? Auf die hab ich leider keinen Zugriff.

    Danke
    Topper

  14. admin sagt

    am 29. November 2012 @ 21:41

    Danke Topper 🙂

    Ist denn auf dem Server PHP5.4 installiert?

    PS
    Habe mal die drei Kommentare zusammengefasst.

    LG
    Julius

  15. Alex sagt

    am 28. Dezember 2012 @ 18:40

    füge bei der fortschritt.php noch

    header(‚Content-type: application/json‘);

    hinzu bevor du json ausgibts… sonst hätte man bei dem script ein problem wenn jemand es über den IE aufruft 😉

  16. Detlef sagt

    am 23. Januar 2013 @ 20:54

    habe heruntergeladen, und auch versucht die hier noch beschriebenen Zeilen einzufügen, scheinbar an der falschen Stelle.

    der Balken wird erst bei 100 % angezeigt und die Datei nicht in das Zielverzeichnis verschoben

    kannst du mir die Dateien nochmal in funktionsfähiger Ausführung per eMail schicken oder posten ?

  17. Real_Thunder sagt

    am 21. Februar 2013 @ 22:09

    An alle bei denen es nicht funktioniert:
    PHP darf nicht als FastCGI eingebunden werden,
    wenn die der Fall ist, dann wird die session icht erstellt.

    MfG Real Thunder

  18. Günter sagt

    am 1. März 2013 @ 13:54

    Hallo,
    funktioniert das Beispiel auch im IE?
    Wie sieht die Browserunterstütung allgemein aus?
    Habs mal kurz getestet (nur akutelle Versionen), im Firefox und Chrome läuft es einwandfrei, der IE und Opera zeigen den Progress nicht an. Erst nach Abschluss kommt hier die Meldung fertig.

    Gibt es einen Workaround für IE und Opera?

    Gruß
    Günter

  19. Christian sagt

    am 11. März 2013 @ 09:46

    >> Unter Windows wollte es bei mir nicht funktionieren

    Bei mir leider auch nicht. Hat schon jemand herausgefunden warum dies so ist? Die Session bekommt einfach nicht die Daten.. 🙁

  20. Chri.s sagt

    am 30. Juli 2013 @ 23:49

    Hallo,

    wie es ausschaut funktioniert es unter IE10 (Win8, Desktop) und FF (aktuell) sehr gut, nur Chrome springt von 0 auf 100%, was noch nicht optimal ist. Werde mal schauen, was es für eine Lösung gibt.

    Trotzdem Danke.

  21. Chri.s sagt

    am 30. Juli 2013 @ 23:57

    OK, hat sich erledigt, warum auch immer geht das ganze nur bis ca 5M, darüber nicht mehr (auch, wenn maximal 20M uploadbar sind).

  22. dieter sagt

    am 6. August 2013 @ 20:58

    das skript ist toll… funktioniert prima… nur wenn ich den namen der hochgeladenen datei dann noch in einer datenbank abspeichern will funktioniert nichts… wie kann ich das machen??? Wäre für hilfe echt dankbar..

  23. Max sagt

    am 10. November 2013 @ 16:31

    Hi,

    hab mir dein script gerade in mein vorhandenes upload script eingefügt. Der Upload und die Progressbar funktionieren. Leider werden die Formular Daten nicht an die upload.php übergeben.

    Woran kann das liegen?

  24. björn sagt

    am 11. Dezember 2013 @ 18:31

    hay habe da mal einen frage wie ganz oben was roland fragt wo genau muss ich das einfürgen was du dann drunter geantwortet hast ? also das es anch dem erfolgreichem upload in den upload ordner kommt

  25. Heinzeinz sagt

    am 7. April 2014 @ 13:57

    Bei mir funzt es leider nicht, wie genau und an welcher Stelle muss mann den

    move_uploaded_file($_FILES[‚file1‘][‚tmp_name‘], ‘upload/’.$_FILES[‚file1′][’name‘]);

    einbinden.
    Bin leider totaler PHP-Anfänger.

  26. Alexander Sidikov sagt

    am 28. Mai 2014 @ 13:08

    @Heinzeinz

    da ist nur ein fehler bei den hochkommata `upload´ -> ‚upload‘

    move_uploaded_file($_FILES[‚file1‘][‚tmp_name‘], ‚upload/‘.$_FILES[‚file1′][’name‘]);

  27. Alexander Sidikov sagt

    am 28. Mai 2014 @ 13:10

    ok leider werden die auch in meinem kommentar falsch gesetzt. Also ersetze einfach die schrägen hochkomma mit geraden.

  28. Marcus sagt

    am 11. Juni 2014 @ 21:28

    Ich habe in upload.php das entsprechende eingefügt damit die Datein in dem Ordner upload landen. Machen sie aber nicht, sie landen im ordner, in dem Ordner, in dem das Script liegt.
    Außerdem würde ich gerne auch andere Datein hochladen wie .mov, .zip etc.
    Wie muss ich hier vorgehen?

    Danke
    Marcus

  29. Cora sagt

    am 2. Juli 2014 @ 12:56

    Vielen Dank für die Dateien und die Kommentare. Nachdem ich zuerst http://www.sitepoint.com/tracking-upload-progress-with-php-and-javascript/ (nur mit js statt mit jQuery, sonst gleich) getestet hatte, habe ich es nun auch mit der hier vorgestellten Lösung versucht.

    Allerdings erhalte ich immer das gleiche Ergebnis: Die Fortschrittsanzeige sieht gut aus. Aber der move-Befehl funktioniert einfach nicht und bereits die Funktion is_uploaded_file liefert false zurück, obwohl das Hochladen ohne Fortschrittsanzeige problemlos funktioniert.

  30. Matze sagt

    am 3. Juli 2014 @ 20:57

    Hi,

    ich bin dir zuerst sehr Dankbar für dein tolles Script. Das hat mir enorm weitergeholfen. Ich habe dummerweise ein seltsames Pänomen. Ich verwende dein Script auf meiner Page an zwei verschiedenen Orten (Uploadbereich und Adminbereich). Im Uploadbereich funktioniert es tadellos aber im Adminbereich habe ich ständig Abbruchfehler, obwohl ich es schon X mal geprüft habe. Das nächste ist, zuhaus auf meiner xampp Umgebung funktioniert alles Super. Aber spiele ich es auf meine Webserver hoch funktioniert der Adminbereich nicht mehr. Zur Info, der Webserver ist ein Windows 2008R2 IIS Server mit Plesk und PHP 5.4. Hat jemand ne Idee was ich falsch mache. Mir gehen die Ideen aus. Gibt es beim IIS ne Besonderheit die ich beachtn muss. Die PHP.ini hat auch alle notwendigen Eintragungen.

    Gruss Matze

  31. Cora sagt

    am 4. Juli 2014 @ 14:14

    Nachtrag: Das oben geschilderte Problem hing mit Datei-/Verzeichnisberechtigungen zusammen und ließ sich lösen.

  32. Cora sagt

    am 10. Juli 2014 @ 10:43

    Ich muss mich doch noch mal zu Wort melden. Für handliche Dateien im MB-Bereich funktioniert die Sache ja prima. Mein Kunde hat aber Dateien im GB-Bereich, und da tut es leider nicht mehr, da in dem Fall die Variable data den Wert null hat. Gibt es zufällig außer mir jemanden mit dem gleichen Problem? Und vielleicht weiß sogar jemand die Lösung?

  33. Cora sagt

    am 15. Juli 2014 @ 18:41

    Nachtrag zu großen Dateien (GB): Der Einsatz von is_int für die großen Zahlen, die im GB-Fall für die Dateigröße (in Bytes!) entstehen, hat gezeigt, dass sie zumindest auf dem Server meines Kunden außerhalb des integer-Bereichs liegen. Damit ist die obige Lösung für derartige Fälle leider nicht anwendbar.

  34. Heu sagt

    am 8. Oktober 2014 @ 15:34

    Hi,

    danke für das Top Tutorial + Script!
    Der Upload funktoniert bei mir auch soweit, nur der Fortschrittsbalken sprint einfach von 0 auf 1 und eine Prozentangabe wird auch nicht angezeigt. Das müsste ja eigentlich an dem „$.getJSON“ – Teil liegen, aber was genau das Problem ist, konnte ich leider nicht heraus finden.

  35. Matthias sagt

    am 2. Dezember 2014 @ 00:39

    Hallo, danke bei mir funktionierts einwandfrei.
    Genau das was ich gesucht habe. Einfach und gut.
    Keine 1000-2000 Zeilen Code.
    Für meine Anwendung hab ich’s noch etwas umgebaut.
    Bei Interesse einfach antworten.

  36. Carsten sagt

    am 9. April 2015 @ 08:29

    Hallo, auch wenn der Beitrag schon etwas ruht habe ich ein kleines Problem mit der Fortschrittsanzeige… Vorerst danke für das Tutorial – ist echt klasse!. Der Upload funktioniert und ansonsten ist auch alles gut. Nur, das der Fortschrittblaken bei mir während des Uploades leer ist und nach erfolgreichem Upload sofort 100% anzeigt… Kann mir jemand sagen woran das liegen könnte? Ich habe das einschlägiger Suchergebnisse heruasgefunden, das dies wohl an den Eisntellungen in der php.ini liegen kann. Leider weis ich nicht wie ich diese ändern kann, da ich mein Webspace (mit php) bei Strato habe…

    Danke im Voraus

    Carsten

  37. Flo sagt

    am 28. Mai 2015 @ 17:33

    Hallo Julius,

    danke auch von meiner Seite aus für das tolle Skript.

    Nur eine Kleinigkeit vermisse ich noch: Die Upload-Geschwindigkeitsanzeige während des Uploads. Wie kann ich diese noch anzeigen lassen, zusätzlich zum Fortschrittsbalken?

    Danke und viele Grüße,
    Flo

  38. Thomas sagt

    am 10. August 2015 @ 09:18

    Danke für das Script, funktioniert 1 A

  39. Oliver sagt

    am 22. Oktober 2015 @ 23:28

    Thanks, I also found a great example here: https://github.com/pH-7/PHP5.4-Session-Upload-Progress-Bar

  40. Bartezz sagt

    am 12. November 2015 @ 15:34

    Hallo,

    ich würde gerne noch ein drittes Formularfeld einfügen z.B:

    Datei 1:

    Datei 2:

    Datei 3:

    Dann funktioniert es aber nicht mehr, was mache ich falsch?

  41. Sven sagt

    am 24. November 2015 @ 18:44

    Hallo, ich finde das Script auch klasse. Funktioniert soweit – ich habe das Problem, daß das Script bei einer Datei immer bei 93% abbricht. Wie kann ich das lösen? Ich möchte auch Dateien hochladen, die größer als 30 MB sind.

  42. Andreas sagt

    am 13. Juli 2017 @ 17:42

    Wie dem auch sei – ist vermutlich schon in die Jahre gekommen und keine gängige Lösung – vielen Dank für die Skripte anyway.

    Will hier nur ergänzend hinzufügen, dass es vernünftig wäre vor dem Upload zu überprüfen, ob die Dateien schon auf dem Server liegen. Das spart Zeit, Energie und sonstige Ressourcen.

    Viel Spaß beim Testen 😉

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name: (erforderlich)

eMail: (erforderlich)

Website:

Kommentar: