Bildupload mit Bildvorschau

BenschM@ster

Mitglied
Hi Forumgemeinde.
An folgendem Problem sitze ich nun schon seit gestern, die halbe Nacht durch.
Jetzt frag ich doch lieber mal nach ;-)

Mein Ziel ist es ein Bild zu einer Art Profil von meiner Website hochladen zu können.
Jetzt möchte ich, bevor das Bild entgültig per "move" im Zielordner abgelegt wird, die Datei temporär anzeigen, damit der Benutzer dann nochmal entscheiden kann, ob das Bild so gefällt.

Hab mich da ein bisschen eingelesen, und erfahren, dass ich das Bild im Session Array speichern kann.
Dafür sieht der Code bei mir so aus:

PHP:
$filename = "./karate.gif";
$handle = fopen ($filename, "rb");
$_SESSION['bild'] = fread ($handle, filesize ($filename));
fclose ($handle);

Beim Abrufen habe ich allerdings Probleme. Wie genau funktioniert das.
Wenn ich folgenden Code in eine 2. Seite einsetze, kommt immer ein Fehler (Fehler in der Datei oder so ähnlich):

PHP:
session_start();
if( ! isset($_SESSION['bild']) )
       die("Kein Bild vorhanden");
if( headers_sent() )
        die("Konnte Bild nicht anzeigen");


header("HTTP/1.1 200 OK");
header("Content-type: image/gif");
$bild = $_SESSION['bild'];
echo "img src=\"$bild\">";

Hab noch gelesen, dass ich die Session ID an die 2. Seite übergeben muss.
Das versteh ich nicht ganz. Wieso muss ich das tun? Die Session ID ist doch jedesmal gleich während einer Session.
session_start() müsste doch eigentlich reichen.

Wenn ich die ID doch übergeben muss, wie genau würde das aussehen, und wie rufe ich die Session ID wieder ab?

Würde mich über Hilfe freuen, steig da noch nicht so ganz durch.
Vielen Dank,
Benjamin
 
Servus,

ist auf der ersten Seite am Anfang auch ein session_start();
angegeben? Wenn ja, müsste die zweite Seite mit session_start(); die Session wieder aufrufen und alles normal abarbeiten.

Zu Seite 1:
PHP:
$filename = $_FILES['upload']['tmp_name'];
Erscheint meines Erachtens nach sinnvoller, das du das Bild ja ausser im tmp-Verzeichnis noch nirgends abgelegt hast.
 
session_start() ist auf beiden Seiten eingetragen, bei der ersten nur weiter vorne.
HTML:
 $filename = "./karate.gif";
müsste passen, weil ich vorerst mal hier bei mir lokal auf dem Rechner teste, wie ich es überhaupt schaffe eine Datei auszulesen und wiederzugeben.

Die Datei karate.gif hab ich testweise angelegt.
 
Hab den Fehler gefunden.
War mal wieder so ein Fehler den man stundenlang sucht und nicht findet ;)
Hab schlichtweg in der Datei, die das Bild darstellen soll, die <html>-Tags dringelassen ;)

Danke für eure Hilfe :-)
 
Womit ich direkt beim nächsten Problem wäre....

Die Datei vorschau_image.php ist nun logischerweise dynamisch...
Allerdings wird diese Datei im Browser Cache abgelegt, und es wird, egal welches Bild ich hochlade, immer das gleiche angezeigt...
Wie kann ich das verhindern?
 
Ahhhh auch das lässt sich mit Hilfe eines kleinen work arounds schnell lösen :-)

echo ‘<img src=”images/show_graph.php?anti_cache=’.time().’” alt=”Mein Graph” />’;

Man hängt einfach an das Bild eine Variable die immer anders ist an. time() bietet sich hierfür an.

Quelle: http://blog.michaelhuebl.de/?p=52
 
Das Problem ist mir bisher noch nicht vorgekommen. Versuche mal weitere Header elemente hinzuzufügen, die das Caching und Expiring betreffen. Eventuell hilft das.

PHP:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
 
Habs rausbekommen...
der Internet Explorer erkennt JPG komischerweise als pjpg...wenn ich image/pjpg OR image/jpg durchlasse, dann funktionierts ;)

Danke nochmal.
Grüße
 
Zurück