php-newbie: Bildupload per Formuar - Dateiverwaltung

Hallo allerseits!

Hier mal wieder die Oberniete mit einer wahrscheinlich banalen Frage. Ich merk grad, vielleicht kommt das besser unter HTML, aber da die Verarbeitung mit PHP geschieht, lass ichs mal hier.

Auf jedenfall. Ich hab mir ein Formular gebastelt wo der User Angaben über sich sowie ein Bild hochladen kann. Funktioniert soweit alles wunderbar. Wird nach Validierung der eingegebenen Werte alles in die Datenbank gepackt und die Datei wird auf dem Server gespeichert. Nuuuuur... das Bild wird nicht als Bild im temporären Ordner des Server gespeichert sondern einfach als "Datei"(?!) mit Namen wie: "sess_tbcbg6n430og6fvl1juovg9qqnnn11ur".

Das ist nicht sonderlich lustig, da ich die nicht wieder in die Form einer Bilddatei bekomme ;)

Ich hab zwar nun massenhaft Seiten durchstöbert in denen es darum geht ein Bildupload-Formular zu basteln, aber von wo und wie die Datei gespeichert wird, hab ich leider bei keinem was gefunden.

Hier noch der Formularcode für das Bild (nur das allernötigste):

  
 <form enctype="multipart/form-data" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">  
    <input type="hidden" name="MAX_FILE_SIZE" value="32768" />  
    <label for="screenshot">Screenshot:</label>  
    <input type="file" id="screenshot" name="screenshot" />  
    <hr />  
    <input type="submit" value="Speichern" name="submit" />  
  </form>  

Was mach ich falsch? :(

Danke schonmal!

  1. Nuuuuur... das Bild wird nicht als Bild im temporären Ordner des Server gespeichert sondern einfach als "Datei"(?!) mit Namen wie: "sess_tbcbg6n430og6fvl1juovg9qqnnn11ur".

    Das ist nicht sonderlich lustig, da ich die nicht wieder in die Form einer Bilddatei bekomme ;)

    Woraus schließst du, dass das Ding nicht in der Form eine Bilddatei wäre?

    Ich hab zwar nun massenhaft Seiten durchstöbert in denen es darum geht ein Bildupload-Formular zu basteln, aber von wo und wie die Datei gespeichert wird, hab ich leider bei keinem was gefunden.

    Hättest du mal lieber in die Dokumentation geschaut ;)

    Hier noch der Formularcode für das Bild (nur das allernötigste):

    Nein, das ist nicht das allernötigste sondern nichts, worauf man auf irgend ein entsprechendes Verhalten am Server schließen könnte.

    Was mach ich falsch? :(

    Du unterschlägst sämtlichen relevanten Code :)

    1. Woraus schließst du, dass das Ding nicht in der Form eine Bilddatei wäre?

      Daraus, dass ich, wenn ich mir per FTP die Datei vom Server hole sie nicht (als Bild) öffnen kann.

      Hättest du mal lieber in die Dokumentation geschaut ;)

      Dort erkenne ich nicht wirklich etwas, das mir weiterhelfen würde. Ausser, dass aufgezeigt wird, wie die Datei verschoben wird. Verschieben will ich sie allerdings noch nicht.

      Nein, das ist nicht das allernötigste sondern nichts, worauf man auf irgend ein entsprechendes Verhalten am Server schließen könnte.

      ähm... ansonsten ist da kein Code der das Bild in irgendwelcher Form betrifft (ausser, dass der Dateiname in die DB eingetragen wird). Allein mit dem Codeausschnitt müsste der Upload in das temp-Verzeichnis des Servers doch bereits funktionieren?!
      Wenn nicht, dann wissen wir nun zumindest wo mein Fehler liegt :D

      Gruss

      1. Woraus schließst du, dass das Ding nicht in der Form eine Bilddatei wäre?

        Daraus, dass ich, wenn ich mir per FTP die Datei vom Server hole sie nicht (als Bild) öffnen kann.

        Mit welcher Software?

        Ich gehe davon aus du verwendest Windows und bietet dir dann lediglich einen Dialog zur Auswahl des geeigneten Programms für eine Datei ohne Endung.

        Das muss aber nicht heissen, dass es keine gültige Bilddatei wäre.

        Hättest du mal lieber in die Dokumentation geschaut ;)

        Dort erkenne ich nicht wirklich etwas, das mir weiterhelfen würde. Ausser, dass aufgezeigt wird, wie die Datei verschoben wird.

        Dort ist in mehreren Schritten ein vollständiges, minimalisiertes Beispiel für einen Fileupload aufgezeigt.

        Verschieben will ich sie allerdings noch nicht.

        Das spielt doch keine Rolle ob du das File verschieben, umbenennen oder wieder löschen willst - so viel Abstraktionsvermögen solltest du schon besitzen, wenn du einen Fileupload erstellen möchtest.

        ähm... ansonsten ist da kein Code der das Bild in irgendwelcher Form betrifft (ausser, dass der Dateiname in die DB eingetragen wird). Allein mit dem Codeausschnitt müsste der Upload in das temp-Verzeichnis des Servers doch bereits funktionieren?!

        Und dann? Und vorher sagtest du noch, du willst nichts verschieben - mach dich bitte zuallererst kundig, was das "temp" in temp-Verzeichnis bedeutet.

        Wenn nicht, dann wissen wir nun zumindest wo mein Fehler liegt :D

        Dir fehlt etwa 75 % des Codes den man üblicherweise für einen Fileupload verwendet. Eine Fire-and-Forget-Missile ist idR. weniger schlau.

        1. Woraus schließst du, dass das Ding nicht in der Form eine Bilddatei wäre?

          Daraus, dass ich, wenn ich mir per FTP die Datei vom Server hole sie nicht (als Bild) öffnen kann.

          Mit welcher Software?

          Ich gehe davon aus du verwendest Windows und bietet dir dann lediglich einen Dialog zur Auswahl des geeigneten Programms für eine Datei ohne Endung.

          Das muss aber nicht heissen, dass es keine gültige Bilddatei wäre.

          Ja, richtig. Und da es auch mit der Windows-Fotoanzeige nicht geöffnet werden konnte, ging ich davon aus, dass es auch keine Bilddatei mehr ist.

          Was den Rest angeht. Das wollte ich bewusst ausklammern, weil ich mich nur auf diesen Punkt beschränken wollte. Dass ich die Datei schlussendlich nicht im temp Ordner lasse ist schon klar, war aber nicht Teil des Themas. Der Upload funktioniert ja und wennn ich $_FILES auslese beim Upload, seh ich auch, dass es sich um ein jpg handelt. Nur halt, dass es auf dem Server dann als Datei ohne Endung rumgurkeln hat mich irritiert.

          Naja, egal....

          Danke

          1. Moin

            Was den Rest angeht. Das wollte ich bewusst ausklammern, weil ich mich nur auf diesen Punkt beschränken wollte. Dass ich die Datei schlussendlich nicht im temp Ordner lasse ist schon klar, war aber nicht Teil des Themas. Der Upload funktioniert ja und wennn ich $_FILES auslese beim Upload, seh ich auch, dass es sich um ein jpg handelt. Nur halt, dass es auf dem Server dann als Datei ohne Endung rumgurkeln hat mich irritiert.

            Sag mal kannst, oder willst du die vorhergehenden Posts nicht verstehen? Wenn eine Datei übertragen wird, wird diese zuersteinmal als temporäre Datei auf dem Server gespeichert (JA, OHNE ENDUNG) Um diese nun verwenden zu können, musst du die Datei aus dem Temp-Ordner verschieben. Das machst du mit move_uploaded_file(). Dabei benennst du die Datei richtig um mit der entsprechenden Endung.

            z.B. move_uploaded_file($_FILES['datei']['tmp_name'],"verzeichnis/auf/deinem/server/bild.jpg")

            Deine TMP-Datei als solches nützt dir überhaupt nichts ohne Weiterverarbeitung.

            Gruß Bobby

            --
            -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
            ### Henry L. Mencken ###
            -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
            ## Viktor Frankl ###
            ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      2. Hi!

        Woraus schließst du, dass das Ding nicht in der Form eine Bilddatei wäre?
        Daraus, dass ich, wenn ich mir per FTP die Datei vom Server hole sie nicht (als Bild) öffnen kann.

        Binär-Übertragung ist sichergestellt? Wichtiger ist aber, dass du die richtigen Dateien nimmst.

        Hättest du mal lieber in die Dokumentation geschaut ;)
        Dort erkenne ich nicht wirklich etwas, das mir weiterhelfen würde. Ausser, dass aufgezeigt wird, wie die Datei verschoben wird. Verschieben will ich sie allerdings noch nicht.

        Du musst sie verschieben, weil sie sonst zum Scriptende aus dem Temp-Verzeichnis gelöscht würde. Die von dir erwähnten sess_...-Dateien sind jedenfalls keine Uploads sondern die Dateien, in denen Sessiondaten abgelegt werden.

        Lo!