move_uploaded_file() ????

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Guten Morgen zusammen

    also ich habe heute morgen früh auf dem Weg zur Arbeit nochmals ein wenig am Code rumprobiert. Dabe habe ich folgende strange Verhaltensweisen festgestellt:
    1. Wird der Computer neu gestartet dann funzt das ganze mit dem Archiv genau 1 mal korrekt. Danach, auch wenn ich die Datei mittels unlink() nach Ausgabe des Archivs wieder lösche, kommt die Zahl wieder in den Namen.
    2. Wenn ich die hochzuladende Datei umbenenne funzt es auch, genau 1 mal und danach dasselbe Problem wie oben.
    3. Die Zahl entspricht der Anzahl Uploads, die bereits mit diesem Namen stattgefunden haben. --> wer hat diese Zahl im Speicher ? PHP, der Häuptling oder Windows ?
    original geschrieben von wahsaga
    Ich vermute eher, dass das entpackende Programm ihn selber aus dem Namen der gepackten Datei herleitet, wenn darin keiner angegeben ist ...
    Das vestehe ich jetzt nicht ganz. Wie sollte mein Zip Progi einen Namen herleiten, wenn die Datei im Archiv keinen Namen hätte ? Bei anderen Dateiendungen sehe ich ja, dass der Name des Files im Archiv korrekt vom Namen des Files genommen wird, das mittels file_get_content() eingelesen wird.
    Da ich ja keinen Namen für die zu packende Datei vorgebe und sonst immer der korrekte Name des eingelesenen Files verwendet wird, kann ich mir nicht recht vorstellen wie der Name hergeleitet werden sollte.
    Ich werde mal noch probieren den Filename im header() zu ändern, sodass er nicht mehr mit dem eingelesenen Filenamen übereinstimmt, um zu sehen ob der Name des gepackten Files irgendwie doch vom Filenamen, der in den Headern angegeben ist, hergeleitet wird.
    Aber auch hier muss ich sagen, dass der Name in den Headern korrekt ist (ohne Zahl) und ich daher nicht verstünde, wenn mein Zip Progi da noch eine Zahl reinzaubern würde (v.a. da mein Zip Progi ja nicht wissen kann wieviel mal die Datei mit diesem Namen schon hochgeladen wurde, und die Zahl scheint irgendwie wat mit der Anzahl Uploads zu tun zu haben)

    Danke vielmals für eure Mühen
    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #17
      Hmm... wenn dir hier keiner helfen kann ... dann könntest du ja auch mal auf der PHP-Mailing List nachfragen ... da lesen ja auch Rasmus Lerdorf u.v.m. mehr mit...
      Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
      var_dump(), print_r(), debug_backtrace und echo.
      Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
      Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
      Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

      Kommentar


      • #18
        @Shurakai
        Jo danke, das werde ich in dem Fall mal machen.

        Ich habe mir folgenden Testcode gebastelt (auf's nötigste reduziert, drum keine Datenvalidierung). Der erste Aufruf (auch wenn die Kiste im StandBy war) funzt immer korrekt. Alle weiteren scheitern kläglich
        PHP-Code:
        <?php
        error_reporting
        (E_ALL);


        if(isset(
        $_FILES['datei']) && isset($_POST)){
            class 
        upload{
                public function 
        createFile($name){
                    
        move_uploaded_file($_FILES['datei']['tmp_name'],
                                
        $_SERVER['DOCUMENT_ROOT'].'/upload/'.$name);
                    
        $this->createGZ($name);
                }
                public function 
        createGZ($name){
                    
        $temp implode('',file($_SERVER['DOCUMENT_ROOT'].'/upload/'.$name));
                    
        $temp gzencode($temp,9);
                    
        header('Content-Type: application/force-download');
                    
        header('Content-Disposition: attachment; filename="temp.bmp.gz"');
                    
        header('Content-Length: '.strlen($temp));
                    echo 
        $temp;
                    exit;
                }
            }
            
            
        $temp = new upload();
            
        $temp->createFile($_FILES['datei']['name']);
            
        $temp->createGZ($_FILES['datei']['name']);
        }else{
        ?>
            <html>
            <head>
            <title>TestClass</title>
            </head>
            <body>
            <form action="<?php echo $_SERVER['PHP_SELF'];?>
        method="post" enctype="multipart/form-data">
            <input name="datei" type="file" /><br />
            <input type="submit" />
            </form>
            </body>
            </html>
        <?php
        }
        ?>
        @wahsaga
        Du hattest natürlich mit deiner Vermutung recht, Tim Der Name des im Archiv gepackten Files scheint aus dem gesendeten Header des Archivs abgeleitet zu werden. Wenn ich ein bmp mit dem Namen test.bmp hochlade und im header mit dem Filename 'temp.bmp.gz' beim Download angebe, dann heisst das entpackte File auch temp.bmp --> wenn jetzt also der Name im header aus einer Var kommt und zu 100% keine Zahl enthält woher kommt sie dann ?

        Ich blicke echt nicht mehr durch. Werde den Tipp von Shurakai aber mal sicher noch probieren. Mal sehen wat die meinen...
        Ich werde meine Neuigkeiten dann wieder hier posten.

        Danke und Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #19
          Original geschrieben von jahlives
          Du hattest natürlich mit deiner Vermutung recht, Tim
          Damit wäre das wahrscheinlich geklärt und ich kann wieder ruhig schlafen, Al
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #20
            Original geschrieben von jahlives
            wenn jetzt also der Name im header aus einer Var kommt und zu 100% keine Zahl enthält woher kommt sie dann ?
            Hast du mal mit verschiedenen Entpackerprogrammen getestet, was die aus deiner heruntergeladenen Datei machen, also welchen Namen sie für die Datei vorschlagen?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #21
              Heureka

              Jipideee habe eine Möglichkeit gefunden, das Problem zu umgehen: Bis jetzt habe ich im Download Dialog immer mit Zip-Progi öffnen angegeben und da war die Zahl immer schön drin.
              Als ich dann aber die Datei erst auf die Platte speicherte und erst dann mit dem Zip-Progi öffnete, siehe da da wars korrekt.
              Wieso wesshalb und warum kann ich mir auch nicht erklären, aber es funzt also was solls

              Danke für alle eure Hilfe und Tipps
              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #22
                Re: Heureka

                Meine Vermutung:

                Wenn du die Datei nicht erst speicherst, sondern direkt aus dem Download-Dialog heraus öffnen lässt, dann speichert der Browser sie in (s)ein Temp-Verzeichnis, und lässt übergibt diesen Pfad/Namen an das öffnende Programm.

                Wenn da im Tempverzeichnis jetzt aber noch eine Download-"Leiche" vom vorherigen Versuch herumliegt - dann hängt der Browser eine Zahl an den Dateinamen an, um die vorhandene Datei nicht zu überschreiben ...
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #23
                  original geschrieben von wahsaga
                  Wenn da im Tempverzeichnis jetzt aber noch eine Download-"Leiche" vom vorherigen Versuch herumliegt - dann hängt der Browser eine Zahl an den Dateinamen an, um die vorhandene Datei nicht zu überschreiben ...
                  Habe ich auch mal gedacht und nach jedem Upload jeweils die tmp Verzeichnisse geleert --> keine Veränderung. Auch im web also nicht lokal auf einem BSD Server gibts das gleiche Problem.
                  Ich habe das ganze auch mal noch in verschiedenen Browsern gestestet. Der IE6 schreibt den Namen dann so temp(1).bmp --> was korrekt wäre wenn die Datei bereits existieren würde (was sie aber nicht tut). Der liebe gute Netscape 7.1 hängt keine Zahl an sondern bennennt die Datei lieber gleich in temp.bmp.php um. Mozilla 1.7.12 hängt die Zahl temp.bmp-3 an und verhält sich somit wie der FF.
                  Wirklich der einzige Browser, der das korrekt zu handeln scheint ist Opera 8.52 --> keine Zahl, keine Änderung am Dateinamen.

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar

                  Lädt...
                  X