Ajax Upload mit Progressbar

  • Hi,
    ich versuche seit 3 Tagen, einen Ajax upload zu realisieren. Wie ich aus fertigen Scripten wie tesupload ond UberUploader weiss, benutzen die alle Perl. Nach langem lernen (xD) ist dann folgendes zustandegekommen:

    Habe das dann mit jQuery kombiniert und hat dann auch fast geklappt, nur wurde das Perl skript - genau wie bei PHP erst nach erfolgreichem & vollständigem hochladen der Datei ausgeführt, wodurch die Sache natürlich ihren sinn verloren hat (die Progressbar war ewig bei 0 und dann eben sofort bei 100%). Kann ich in der ersten zeile Perl iwie dazu anweisen, einfach munter anzufangen, egal ob die Datei nun hochgeladen ist oder noch nicht?

    Ich bin dann noch auf die PHP-Extension APC (php_apc.dll) gestpßen, jedoch läuft das nicht auf meinem Server (php.ini nicht zugänglich, modul deaktiviert) und bei mir lokal bekomme ich von apc_fetch() immer nur false anstadt ein array mit daten zum upload. (Ich habde mich dabei nach diesem Tutorial gerichtet).

    Hat jemand eine Ahnung, warum das Perl Skript nicht gut läuft oder was ich mit APC falsch mache? Bin echt am verzweifeln. Vielen Dank schon im vorraus an alle die sich Gedanken machen!

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    Einmal editiert, zuletzt von Tobse (30. September 2010 um 21:12)

  • Ja Perl wird interpretiert, aber in den Demos klappt das doch mit Perl ... ? Flash will ich ungern nehmen wegen den Mac Usern und weil langsam aber sicher stirbt, so ähnlich wie es Java-Appltes schon vor 10 jahren waren.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Ich kenn Perl nicht wirklich aber ich glaube nicht das es uffn Dämon läuft

    Wie dem auch sei mach es doch mit APC das klappt, aber wenn du schon so ne Funktion willst und nicht mal PHP INI verändern kannst tut es mir Leid und du bauchst so eine Funktion nicht,...

    Ansonsten kannst auch die DSL Geschwindigkeit ermitteln und vorher die Datei größe ermitteln und anhand der Werte ne Progressbar machen , die ist zwar nicht genau aber so kann dir keiner helfen...

  • Ich kann die php.ini "theoretisch" schon editieren, aber ich weiss weder wo sie ist, noch wird ein server-neustart so schnell klappen. Aber wir können ja mit XAMPP anfangen xD.
    Die Extension ist ja bei xampp dabei, hab daraufhin also xampp/php/php.ini geändert, apc läuft. Aber die Funktion apc_fetch() (So wie im Tutorial erklärt) gibt mir immer false.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • ja ohne Code kann man dir nicht helfen, hast du den auch ein APC_UPLOAD_PROGRESS Hiddenfeld etc?

    Wenn nein Google mal nach nen Tutorial

    Edit:
    Hab gerade gelesen das Perl anscheinend solche Variante von Haus aus bietet

  • Ja, das input hab ich:

    PHP
    $c="<h1>".$l->get("upload_page_headline")."</h1>"
            ."<iframe name=\"upload_iframe\" id=\"upload_iframe\"></iframe>"
            ."<div id=\"upload_file_form\"><a>".$l->get("upload_select_file")."</a>"
            ."<form action=\"uploader/upload.php\" method=\"POST\"  target=\"upload_iframe\" id=\"upl_fileform\"  enctype=\"multipart/form-data\">"
            // Hier das hidden
            .'<input type="hidden" name="APC_UPLOAD_PROGRESS" value="'.session_id().'"/>'
            ///////////////////////
            ."<input type=\"file\"  name=\"file\"></form><input type=\"button\"  onclick=\"startUpload()\"  value=\"".$l->get("upload_startbutton")."\"></div>";
    // weiterer, unwichtiger teil

    Dann prüft js auf uploader/get_process.php:

    und noch upload.php

    PHP
    <?php
    session_start();
    if (isset($_FILES['file'])) {
        move_uploaded_file($_FILES['file']['tmp_name'], "../upload_tmp/".session_id().".tmp");
    }
    ?>

    EDIT:
    hab grade noch in upload.php $_POST['APC_UPLOAD_PROGRESS'] in ne datei reingeschrieben, kommt beim server an und ist auch == session_id() und meinem cookie im browser.
    EDIT2:
    die demo vom tutorial (http://www.easy-coding.de/wiki/php/uploa…t-php-ajax.html) funktioniert auch nicht.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    3 Mal editiert, zuletzt von Tobse (30. September 2010 um 20:15)

  • Doch das geht schon, irgentwo ist der Fehler debugg mal richtig, verschieb mal das Hiddenfeld ganz nach oben nach das FORM

    Irgent so ein dummer Fehler war es bei mir vor einigen Jahren auch

  • Das steht schon ganz oben. In der Demo hab ich die status.php auch mal geändert. Da kommt aber immer nur

    Code
    bool(false)

    daraufhin hab ich dann in die status.php das rein:

    PHP
    <?php
    error_reporting(E_ALL);
    $str="upload_{".$_GET['uid']."}";
    $arr=apc_fetch($str);
    var_dump($arr);
    echo $str;
    ?>

    und sie dann manuell mit der ?uid= id aus dem Formular-Quelltext aufgerufen. Die Ausgabe:

    Code
    bool(false) upload_{4ca4d675aba96}

    Die Demo git per JS auch immer die ausgabe der status.php aus, da steht auch während des ganzen uploads immer bool(false) .
    EDIT:
    Kann man nicht der .dll ne -help flag geben und sichd ann per kommandozeile genaueres ansehen?

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hast du die ganzen PHP Einstellungen den vorgenommen????

    Was passiert bei

    Code
    [COLOR=#0000FF]$var [/COLOR]= [COLOR=#FF0000]'muh1'[/COLOR]; apc_store[COLOR=#66CC66]([/COLOR][COLOR=#FF0000]'muh'[/COLOR], [COLOR=#0000FF]$var[/COLOR][COLOR=#66CC66])[/COLOR]; [URL='http://www.coder-suche.de/search.jsp?query=site%3Ade.php.net+var_dump'][COLOR=#000066]var_dump[/COLOR][/URL][COLOR=#66CC66]([/COLOR]apc_fetch[COLOR=#66CC66]([/COLOR][COLOR=#FF0000]'muh'[/COLOR][COLOR=#66CC66])[/COLOR][COLOR=#66CC66])[/COLOR];
  • Ich bin diesem tutorial gefolgt, hab alles gemacht, was drin stand, das hat funktioniert. Hier der auszug aus meiner php.ini:

    auch
    apc_sma_info(); hat funktioniert und mir in avail_mem ~ 300 MB angegeben.

    Die ausgabe vom Codeschnipsel ist "muhl".

    EDIT:
    Es klappt! Yuppi!
    Dashabe ich noch tun müssen:
    Zsätzlich zu den einträgen in der PHP.INI muss noch das dazu:

    Code
    apc.rfc1867_freq = 100k
    apc.rfc1867 = on

    Thx Pion.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

    2 Mal editiert, zuletzt von Tobse (30. September 2010 um 21:45)