upload mit Vorschau

Hallo zusammen,

ich arbeite seit einiger Zeit an einem kleinen CMS. Der User hat die Möglichkeit Text einzugeben und Bilder upzuloaden. Um das ganze vor dem "online-stellen" prüfen zu können, habe ich eine Vorschau eingebaut. Heisst, der User kann auf den button "Vorschau" klicken und sieht das ganze, wie es aussehen wird - es wird aber noch nicht direkt online gestellt. Erst wenn er auf "Eintragen" klickt. Soweit so gut - funktioniert alles.

Jetzt zum Problem Bilder upload und Vorschau:

Die Vorschau habe ich mit einer SESSION bewerkstelligt in welcher die bild-url angegeben wird. Allerdings klappt das nur, wenn ich das Bild mit move_uploaded_file() schon an die Endposition auf dem Server verfrachtet habe. Denn, wenn ich eine url für das Bild folgendermassen generiere:

PHP:
$tempname = $_FILES['bild'.$i]['tmp_name'];
$name = $_FILES['bild'.$i]['name'];
bildurl[$i] = $tempname.$name;

wird das leider nix. Das heisst, dass das Bild schon auf dem Server gespeichert werden muss, obwohl noch garnicht sicher ist, ob dieses Bild verwendet werden soll.

Hat jemand eine Idee wie man dieses Problem lösen kann? Also, wie kann ich das Bild erst mal temporär anzeigen und später wenn alles fertig ist erst speichern.

Noch eine Frage: kann ein input feld welches für den upload genutzt wird auch eine value tragen in welchen ich z.B. einen Pfad per Variable eingebe?

Danke für Hilfe

Gruss

ND
 
Zuletzt bearbeitet:
da der Server das Bild ja kennen muss um es, auch für eine Vorschau, anzuzeigen, muss es also irgndwo auf dem Server liegen.
Nun hättest du die Möglichkeit, das Bild zu empfangen und mit move_upload... in ein temporäres Verzeichnis zu speichern und aus diesem in das Zeilverzeichnis zu verschieben, wenn alles Ok ist. Dann müsstest du dir aber für den Fall, dass dort Bidler verschimmeln und den Platz wegfressen per Script von Zeit zu Zeit überprüfen ob es Bilder vgibt, die z.B. älter als eine woche oder so sind.
Was du aber auch probieren köntnest, wäre das Du das Bild was der User hochgeladen hat einliest mit fopen, den Inhalt als Element in deinem Session Array speicherst und zum Anzeigen ausliest. Gefällt dem User das Bild kannst du es gerade wieder aus dem Session Array löschen. Ob das allerdings so klappt bin ich mir nicht sicher, aber wenn serialize keinen mist baut, soltle das gehen.
 
Hi Ben-Ben,

Danke für Deine Antwort.

Ja genau, um das Bild anzuzeigen brauche ich einen Pfad wo es auf dem Server liegt. Deshalb muss es auch für die Vorschau hochgeladen werden. Das ist genau aus dem Grund den Du ja auch erkannt hast (dass irgendwann viel Müll auf dem Server liegt) eben ziemlich blöde.

Das Bild mit fopen zu öffen ist ein Idee. Die andere ist, ein script zu schreiben was eine nicht genutze Datei gleich wieder löscht.

Um letzteres werde ich wohl nicht rumkommen - Deinen Vorschlage werde ich aber ebenfalls checken. Hast Du einen Tipp wie das mit einem Bild und serialize im Grunde funktioniert ? Kleines Bsp.?

Vielen Dank und Gruss

ND
 
Jo und genau wegen dem Rumfliegenden Datenmüll kam ich drauf, das man es in Sessions speiocehrn köntne, da eine Session auch nur eine Datei im Tempordner ist die von Zeit zu Zeit vom Garbagecollector gelöscht werden.

Na serialize macht der Sessionhandler selbst.
Was du machen müsstest wäre
PHP:
  $myfile = "datei.jpg";
  if( ($fh = fopen($myfile, "rb")) !== TRUE )
       die("Fehler beim Einlesen);
   
   $_SESSION['bilddaten'] = fread($fh, filesize($myfile)); //Liest Datei von Anfang bis Ende ein;
   fclose($fh);

Nun Sollte der Bild-Inhalt in $_SESSION['bilddaten'] stehen.
Das Bild kansnt du dann mti einer Datei anzeigen, der du die SessionID übergibst, z.B. so

....show.php?PHPSESSID=.....
PHP:
 session_start();
 if( ! isset($_SESSION['bilddaten']) )
       die("Kein Bild vorhanden");
 if( headers_sent() )
        die("Konnte Bild nicht anzeigen");
  
  header("HTTP/1.1 200 OK"); 
  header("Content-type: image/jpg");  //Mimetype fürs Bild setzen, wenn er denn Stimmt :-\
  echo $_SESSION['bilddaten'];
  exit;

So grob dieses Zweite Script sollte dir dann das Bild anzeigen.
Die Fehlerbehandlung ist allerdings nur rudimentär.
Bei dem Mimetype bin ich mir nicht so sicher ob er stimmt, aber eine Liste findest du bei Selfhtml
 
Zurück