Tom: Bild hochladen oder doch nicht

Beitrag lesen

Hello,

Hello,

ein solcher Vorgang ist ein klassisches Beispiel für eine Session.

Client: Der User lädt etwas
Server: auf den Server.
        Ein Auszug daraus
Client: wird ihm zur Kontrolle nochmals angezeigt.
        Wenn alle Angaben OK sind,
Server: sollen sie auf dem Server verarbeitet werden und
Client: auf dem Client eine Quittung ausgegeben werden

Um die Datenmenge beim Ping-Pong-Spiel zwischen Client und Server zu minimieren werden alle bereits hochgeldandenen Daten auf dem Server gespeichert, typischerweise in einer Sessiondatei.
Außerdem kann sich der Server in dieser Sessiondatei seine eigenen Vermerke füe den Vorgang machen, also Variablen speichern, die den Client überhaupt nix angehen.

Wenn Dein Bild nicht zu groß wird, kannst Du es also auch in der Sessiondatei abspeichern.

Dazu legst Du im Session-Array einfach eine Variable an:

if (isset($_FILES[$fieldname]['error'] and $_FILES[$fieldname]['error']===0))
{
   $_SESSION[$fieldname]['content'] = file_get_contents($_FILES[$fieldname]['temp_name']);
   $_SESSION[$fieldname]['name']    = basename($_FILES[$fieldname]['name']);
   $_SESSION[$fieldname]['realmimetype'] = mime_content_type($_FILES[$fieldname]['temp_name']);
}

Nun sind der Inhalt der Uploaddatei und der lokale Name der Uploaddatei vom Client in der Session gespeichert.

Du kannst nun z.B. ein Thumbnail daraus machen und dieses dann in einem speziellen, durch http erreichbaren Verzeichnis unter einem zufälligen Dateinamen ablegen und diesen Namen dann als src="meinthumbname.jpg" in die response einbauen oder Du produzierst aus der Session ein 'Thumbnail on the fly'. Dazu benötigst Du eine Funktion, die auf

<image src="meinbild.php" alt="Vorschaubild" />

eben mittels der Ressource meinbild.php in der aktuellen Session schaut, ob unter

$_SESSION[$fieldname]['content']

ein sinniger Eintrag besteht, und dieser ein Bild ist
http://www.php.net/manual/de/function.imagecreatefromstring.php

Nach dem Resizen mit
http://www.php.net/manual/de/function.imagecopyresized.php

oder Resamplen mit
http://www.php.net/manual/de/function.imagecopyresampled.php

kannst Du es dann mit
[http://www.php.net/manual/de/function.imagejpeg.php]

wieder an den Client ausgeben.
Vergiss nicht, den JPG-Content-Header davor zu setzen.

Alternativ kann man bei größeren Bildern auch eine temporäre Bilddatei im Session-Verszeichnis ablegen. Das ist nicht ganz einfach, weil man einen gültigen Sessionnamen erzeugen muss, ohne wirklich eine Session zu starten für das Bild. Aber es funktioniert prima und abgelaufene Bilder werden so genauso wieder aufgeräumt nach einiger Zeit, wie abgelaufene Sessions.

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de