1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Dateiupload mit Statusanzeige

Dieses Thema im Forum "PHP & Co." wurde erstellt von _linx_, 03.01.10.

  1. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Ich habe mir gerade überlegt, wie man eine Statusanzeige bei einem Dateiupload realisiert.

    Ich habe daran gedacht, lokal ein PHP Skript auszuführen, dass mir entweder via GET/POST oder FTP-Protokoll Daten an den Server übermittelt. Mit JS (AJAX) könnte ich dann das PHP-Skript aufrufen und eine Statusanzeige realisieren.

    Da ich lediglich in PHP gut bewandert bin und keine andere Programmiersprache erlernen möchte (aus zeitlichen Gründen, ist nur ein kleines Hobby), wäre ich um eine Lösung in PHP erwünscht.
     
  2. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Im Moment sieht es so aus:

    Man ruft die test.html auf, klickt auf den Link und die test.php lädt eine Datei runter. Dabei wird kontinuierlich der Status in Prozent ausgegeben. Die test.html ruft diese ab und gibt jeweils die letzte Zeile aus.

    test.php
    Code:
    <?php
        $fp = fsockopen("www.test.com", 80, $errno, $errstr, 30);
        $filesize = 7 * 1024 * 1024 + 90000;
        $file = null;
        if (!$fp) {
            echo "$errstr ($errno)<br />\n";
        } else {
            $out = "POST /DispMap.psd HTTP/1.1\r\n";
            $out .= "Host: www.test.com\r\n";
            $out .= "Connection: Close\r\n\r\n";
            fwrite($fp, $out);
            while (!feof($fp)) {
                $file .= fgets($fp, 128);
                $readen_bytes = strlen($file);
                $percent = $readen_bytes / $filesize * 100;
                echo $percent, "\n";
            }
            fclose($fp);
        }
        
        $handle = fopen('DispMap.psd', 'w+');
        fwrite($handle, $file);
        fclose($handle);
    ?>
    test.html
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
            <script type="text/javascript">
                function ajaxBuild() {
                    if(window.ActiveXObject) {
                        http_request = new ActiveXObject('Microsoft.XMLHTTP');
                    }
                    else if(window.XMLHttpRequest) {
                        http_request = new XMLHttpRequest();
                    }
                    http_request.onreadystatechange = showStatus;
                    http_request.open('GET', 'test.php', true);
                    http_request.send(null);
                }
                function showStatus() {
                    if(http_request.readyState == 3) {
                            var answer;
                            answer = http_request.responseText.split("\n");
                            answer = answer.pop();
                            document.getElementById('status').innerHTML = answer;
                            window.setTimeout("emptyFunction()", 1000);
                    }
                }
                function emptyFunction() {
                }
            </script>
        </head>
        <body>
            <a href="javascript:ajaxBuild()">Load File</a><br />
            <br />
            <div id="status">0</div>
        </body>
    </html>
    Die Probleme:

    1. Im Firefox geht es ohne Probleme, der Fortschritt wird mir angezeigt. Safari zeigt mir während des ganzen Vorgangs gar nichts an. Das wäre das erste Problem, das zu lösen wäre.
    edit: Safari ignoriert irgendwie den readyState 3…

    2. Wie rufe ich die Dateigrösse mit den Socketfunktionen ab?

    3. Das window.setTimeout funktioniert noch nicht, ich muss die Zeile wohl nach ganz oben in der Funktion schieben. Die Funktion ist auch ziemlich sinnfrei.

    4. Die Downloadgeschwindigkeit unterliegt extremen Schwankungen. Getestet mit einer 150 MB grossen Datei.
    [​IMG]

    Das ganze ist halt momentan so aufgebaut, dass auf eventuelle Fehler überhaupt nicht eingegangen wird und dann halt eine riesige Fehlerflut kommt.

    Wenn jemand Anregungen hat, bitte melden!
     
    #2 _linx_, 03.01.10
    Zuletzt bearbeitet: 03.01.10
  3. Slashwalker

    Slashwalker Winterbanana

    Dabei seit:
    15.05.06
    Beiträge:
    2.190
    Also ich habe kürzlich auch an einem Dateiupload mit Status gearbeitet. Ich habe dafür Uploadyfy genutzt:
    http://www.uploadify.com
     

Diese Seite empfehlen