Den Beginn beim Verarbeiten eines hochgeladenen Bildes macht die Analyse des hochgeladenen Bildes. Wir konzentrieren uns dabei nur auf die Bildbearbeitung. Wie man ein Formular erstellen kann, mit dem auch Bilder hochgeladen werden können, ist im HTML-Teil bei den Formularen ein Thema, sollte jetzt aber als bekannt vorausgesetzt werden.
Ein Nutzer hat die Seite besucht, sich als Mitglied eingeloggt und ist berechtigt, einen neuen Eintrag samt Bild zu erstellen. Die Aufgabenstellung besteht nun darin, dass das Bild zwar hochgeladen worden ist, aber damit steht es noch nicht für weitere Besucher zur Verfügung.
Webhosting mit viel Software bei Alfahosting (Affiliate-Link)
Das Praxisbeispiel hat folgendes Aussehen:
<?php
$bild_name = $_FILES["bild"]["name"];
$original = $_FILES["bild"]["tmp_name"];
copy ($original, "Pfad zum Verzeichnis/$bild_name");
$image_p = imagecreatetruecolor(100, 100);
$image = imagecreatefromjpeg("Pfad zum Verzeichnis/$bild_name");
imagecopyresampled($image_p, $image, 0, 0, 0, 0, 100, 100, 400, 400);
imagejpeg($image_p, "Pfad zum Verzeichnis/thumb/$bild_name", 100);
?>
Wir konzentrieren uns im ersten Schritt auf das hochgeladene Bild. Ein Besucher hat ein Bild über ein Formular an den Server geschickt - eine andere denkbare Variante ist, dass über eine Verwaltung von einem Projektmitglied ein Bild hochgeladen wurde.
Wie auch immer - auf dem Server gibt es ein neues Bild. Wie auf der Einstiegsseite besprochen, gehen wir davon aus, dass das Bild fix 400 x 400 Pixel groß ist und damit brauchen wir uns um die Größe des Bildes nicht kümmern. Natürlich kann man die Größe auch mit Abfragen analysieren, doch das ist jetzt nicht unser Thema.
Webhosting bei Alfahosting - jetzt gratis testen! (Affiliate-Link)
Die ersten beiden Zeilen des Praxisbeispieles fragen das hochgeladene Bild einmal ab.
$bild_name = $_FILES["bild"]["name"];
$original = $_FILES["bild"]["tmp_name"];
Mit $_FILES kann jede Art von Datei abgefragt werden, die über ein Formular geschickt wird. Das Array ["bild"] teilt dem Server mit, dass wir nur an Bildinformationen interessiert sind. Von daher arbeiten beide Befehle gleich, aber ["name"] liefert den Dateinamen, ["tmp_name"] hingegen den Pfad zum Temp-Verzeichnis, wo das Bild zwischengespeichert wurde. Diese Unterscheidung ist wesentlich.
Wenn man zum Beispiel die Bilder in verschiedenen Verzeichnissen ablegen möchte, hilft die so erstellte Variable $bild_name, damit man den späteren Pfad manipulieren kann. Man könnte nun den Bildnamen durch
$bild_name = "irgendwo/links/hinten/".$bild_name
erweitern, wobei die genannten Verzeichnisse aber am Server auch gegeben sein müssen. Die Variable $bild_name ist daher für die Bezeichnung und eventuelle Manipulationen nötig, $original brauchen wir, um das Bild in der Originalgröße speichern zu können. Dafür gibt es die dritte Zeile im Praxisbeispiel.
copy ($original, "Pfad zum Verzeichnis/$bild_name");
Hiermit kopieren wir das Bild vom vorübergehenden Speicherplatz ($original) zu jenem Verzeichnis, wo wir das Bild haben wollen. Nehmen wir an, der Pfad zum Root ist /var/www/web