APC + JSON = AJAX Upload Status Bar - problem mit session_id()

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • APC + JSON = AJAX Upload Status Bar - problem mit session_id()

    Ja also ich bin dabei mal wieder so nen Dateiupload zu basteln weil ich grade Langeweile habe! Natürlich soll das Dingen auch ne Statusanzeige bekommen. :D

    Naja laufen tut's soweit, leider nur wenn ich im Felde:

    Quellcode

    1. <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress" value="<?php echo session_id(); ?>" />


    nehme.

    Das Problem an der Geschichte ist wenn ich was hochlade steht ja im dem oben genannten Felde die aktuelle Session ID. Wenn ich die Seite neu lade steht aber auch wieder die alte Session ID drinn und der zeigt mir beim erneuten hochladen einer anderen Datei denn Status von dem alten Upload an z.B.


    Array ( [total] => 13144 [current] => 13144 [rate] => 105152 [filename] => hell8ie.png [name] => upload [temp_filename] => C:\xampp\tmp\php32.tmp [cancel_upload] => 0 [done] => 1 )


    Deswegen hab ich mir gedacht nimmst halt was anderes um eine eindeutige ID zu bekommen halt uniqid(), das Problem dabei ist das es mit uniqid() nicht gehen möchte ich bekomme dann überhaut keine Rückmeldung bzw. wenn ich:

    Quellcode

    1. <?php
    2. if($_SERVER['REQUEST_METHOD']=='POST') {
    3. $status = apc_fetch('upload_'.$_POST['APC_UPLOAD_PROGRESS']);
    4. $status['msg'] = 'blah';
    5. echo json_encode($status);
    6. exit;
    7. } else if(isset($_GET['progress_key'])) {
    8. $status = apc_fetch('upload_'.$_GET['progress']);
    9. echo json_encode($status);
    10. }
    11. ?>
    Alles anzeigen


    nutze ein freundliches false!

    Naja jemand irgendwie eine Idee woran das liegen könnte? :huh:

    Achja Code? ;)

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    5. <title>[url]www.filehoster.mobi[/url] .:: Easy Filhosting Service ;-) ::.</title>
    6. <style type="text/css">
    7. .content{
    8. margin-left: 100px;
    9. margin-top: 25px;
    10. width:75%
    11. }
    12. .text {
    13. font-family: Verdana, Arial, Helvetica, sans-serif;
    14. font-weight: bold;
    15. font-size: 9px;
    16. }
    17. </style>
    18. <script type="text/javascript">
    19. <!--
    20. function sendRequest() {
    21. document.getElementById('upload_status').style.display = 'block';
    22. try {
    23. req = window.XMLHttpRequest?new XMLHttpRequest():
    24. new ActiveXObject("Microsoft.XMLHTTP");
    25. } catch (e) {
    26. //Kein AJAX Support
    27. }
    28. req.onreadystatechange = handleResponse;
    29. sid = document.getElementById('progress').value;
    30. req.open('get', 'status.php?progress='+ sid);
    31. req.send(null);
    32. }
    33. function handleResponse() {
    34. document.getElementById('upload_status').innerHTML = req.responseText;
    35. }
    36. window.setInterval("sendRequest()", 10000);
    37. -->
    38. </script>
    39. </head>
    40. <body>
    41. <div class="content" id="content">
    42. <fieldset>
    43. <legend class="text">Bitte wähle eine Datei aus:</legend>
    44. <form action="<?php $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post" target="hidden_upload" onsubmit="sendRequest();">
    45. <iframe id='hidden_upload' name='hidden_upload' src='' style='width:1px;height:1px;border:0'></iframe>
    46. <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress" value="<?php echo $uid; ?>" />
    47. <input id="upload" name="upload" size="30" type="file">
    48. <input type="submit" value="Datei hochladen">
    49. </form>
    50. </fieldset>
    51. <br />
    52. <div id="upload_status" style="display:none;">Einen Moment bitte...</div>
    53. </div>
    54. </body>
    55. </html>
    Alles anzeigen


    MfG der Torsten :thumbsup:
    .:: Bom Chicka Wah Wah ::.
  • Die Session startest du aber auch, oder? Wirst du bestimmt, sonst wäre die ID ja leer.
    Da die SESSION ID auch in der status.php zur Verfügung steht, bräuchtest du die ID nicht per GET übergeben.

    Ansonsten setz mal den Interval herunter - die 12 KB gehen ja bestimmt flott:

    Quellcode

    1. window.setInterval("sendRequest()", 1000);


    Sind alles keine konkreten Hinweise.. vielleicht hilfts..
  • Hihi schon klar! :D

    Aber sicher nutze ich am Anfang der Seite <?php session_start(); ?>. Hab das wohl vergessen mitzuposten. Ok wenn wir mal davon absehen das jetzt überhaupt nix mehr geht, ging es mir ja vielmehr darum das sagen wir mal der Upload die ID 123456789 bekommt, lade ich die Seite neu bekommt ebend dieser ja wieder die ID 123456789, Problem wenn ich mir dann denn Status des laufenden Uploads anzeigen lasse bekomme ich nicht denn Status des neuen Uploads sondern denn des Vorgängers. (Wenn jetzt denn nur mit einem n geschrieben wird tuts mir schonmal leid!)

    Also bekomme ich in dem oben genannten Fall folgendes zurück:

    Array ( [total] => 13144 [current] => 13144 [rate] => 105152 [filename] => hell8ie.png [name] => upload [temp_filename] => C:\xampp\tmp\php32.tmp [cancel_upload] => 0 [done] => 1 )


    Achja hier nochmal der Code:

    index.php

    Quellcode

    1. <?php
    2. session_start();
    3. $uid = session_id();
    4. ?>
    5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    6. <html xmlns="http://www.w3.org/1999/xhtml">
    7. <head>
    8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    9. <title>[url]www.filehoster.mobi[/url] .:: Easy Filhosting Service ;-) ::.</title>
    10. <style type="text/css">
    11. .content{
    12. margin-left: 100px;
    13. margin-top: 25px;
    14. width:75%
    15. }
    16. .text {
    17. font-family: Verdana, Arial, Helvetica, sans-serif;
    18. font-weight: bold;
    19. font-size: 9px;
    20. }
    21. </style>
    22. <script type="text/javascript">
    23. <!--
    24. function sendRequest() {
    25. document.getElementById('upload_status').style.display = 'block';
    26. try {
    27. req = window.XMLHttpRequest?new XMLHttpRequest():
    28. new ActiveXObject("Microsoft.XMLHTTP");
    29. } catch (e) {
    30. //Kein AJAX Support
    31. }
    32. req.onreadystatechange = handleResponse;
    33. sid = document.getElementById('progress').value;
    34. req.open('get', 'status.php?progress='+ sid);
    35. req.send(null);
    36. }
    37. function handleResponse() {
    38. document.getElementById('upload_status').innerHTML = req.responseText;
    39. }
    40. window.setInterval("sendRequest()", 1000);
    41. -->
    42. </script>
    43. </head>
    44. <body>
    45. <div class="content" id="content">
    46. <fieldset>
    47. <legend class="text">Bitte wähle eine Datei aus:</legend>
    48. <form action="<?php $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post" target="hidden_upload" onsubmit="sendRequest();">
    49. <iframe id='hidden_upload' name='hidden_upload' src='' style='width:1px;height:1px;border:0'></iframe>
    50. <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress" value="<?php echo $uid; ?>" />
    51. <input id="upload" name="upload" size="30" type="file">
    52. <input type="submit" value="Datei hochladen">
    53. </form>
    54. </fieldset>
    55. <br />
    56. <div id="upload_status" style="display:none;">Einen Moment bitte...</div>
    57. </div>
    58. </body>
    59. </html>
    Alles anzeigen


    status.php

    Quellcode

    1. <?php
    2. print_r(apc_fetch('upload_'.$_GET['p']))
    3. ?>


    Ok, soweit ich das sehe läuft jetzt alles! Problem ist nur das localhost Uploads bissel zu schnell sind um das zu testen. Kann man die Geschwindigkeit der Uploads regeln in der php.ini oder so? Ausserdem werden keine *.avi, *.mpeg's usw angenommen?
    .:: Bom Chicka Wah Wah ::.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Torsten ()

  • Die Geschindigkeit kannst du ohne Weiteres nicht regeln. Wenn du nicht hinter einem Router sitzt, kannst du dein Skript aber mit anstatt mit deiner lokalen ip (127.0.0.1) mit deiner "Internet-ip" aufrufen. Dann geht das ganze übers Netz wieder zu dir.

    Zu dem avi Problem: Ich nehme mal an, dass deine max_upload_size Angabe zu klein is, die is Standard bei 16M die lässt sich in der php.ini aber anpassen!