Einführung in die gdLibrary (gdLib)

Massenupload

Wenn man Fotogalerien erstellt, macht es keinen Sinn, 200 Fotos einzeln mit unserem Uploadformular aus Übung 5 hochzuladen. Besser wäre es, wenn man alle Bilder von der Festplatte wählt und gdLib macht den Rest. Leider geht es nicht so einfach, da ein File-Feld in HTML nur jeweils eine Datei erlaubt.
Besser ist es, wenn man die Bilder im Original vorab auf einen ftp-Server speichert und dann einfach nur noch unsere Funktion startet. Das funktioniert tadellos.

Aufgabe: Vollautomatischer Massenupload für Online-Fotogalerien

In Übung 5 bin ich darauf eingegangen, wie wir eine Datei mit ftp hochladen. Da in diesem Beispiel nur einen Schleife hinzukommt, lasse ich die bekannten Passagen raus.
Die Handhabe ist eigentlich ganz einfach. Wir bauen eine ftp-Verbindung zum Server aus, lesen das Verzeichnis aus, in dem sich unsere Originalbilder befinden und gehen dann Bild für Bild durch. Zum Schluss löschen wir das Originalbild vom Server. Das erlaubt uns, mit ftp auf dem Server zu schauen, wie weit unsere Funktion ist. Im Falle eines Abbruchs brauchen wir unsere Funktion einfach wieder neu starten. Da die verarbeiteten Bilder gelöscht sind, geht unsere Funktion nur noch die verbliebenen Bilder durch.

Der Code:

  1. <?php
  2.  
  3. // FTP-Verbindung aufbauen
  4. // Verzeichnis auslesen
  5. $dir = ftp_pwd($ftp_conn_id);
  6. $list = array();
  7. $list = ftp_nlist($ftp_conn_id, $dir);
  8. sort ($list); reset ($list);
  9.  
  10. // Jede Datei durchgehen
  11. for ($i = 0; $i < sizeof($list); $i++) {
  12. $filename_old = basename($list[$i]);
  13. $file_prfx = strrchr($filename_old, '.');
  14. $local_file = '/tmp/'.$filename_old;
  15.  
  16. if (($file_prfx == '.jpg') || ($file_prfx == '.JPG')) {
  17. // Foto vom Server laden
  18. if (!ftp_get($ftp_conn_id, $local_file, $filename_old, FTP_BINARY)) return false;
  19.  
  20. // Foto in die Datenbank eintragen
  21. // Grössen definieren
  22.  
  23. $old_picture = imagecreatefromjpeg($local_file);
  24.  
  25. // Bild verarbeiten und hochladen
  26. $new_picture = imagecreatetruecolor($width_new, $height_new);
  27. imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width_new, $height_new, $width_old, $height_old);
  28.  
  29. // altes Foto vom Server löschen
  30. if (!ftp_delete($ftp_conn_id, $filename_old)) return false;
  31. } else {
  32. if (!ftp_delete($ftp_conn_id, $filename_old)) return false;
  33. }
  34. }
  35. ftp_quit($ftp_conn_id);
  36.  
  37. ?>
Die wichtigsten Befehle kurz im Überblick
  • ftp_nlist
    ftp_nlist(ftp_stream, Verzeichnis)
    Gibt eine Liste der im angegebenen Verzeichnis enthaltenen Dateien zurück
  • reset
    reset(array)
    Setzt den internen Zeiger eines Arrays auf sein erstes Element
  • basename
    basename(path [, suffix])
    Extrahiert den Namen einer Datei aus einer vollständigen Pfadangabe
  • strrchr
    strrchr(haystack, needle)
    Sucht letztes Vorkommen des gesuchten Zeichens und liefert den Reststring
Downloads

Einführung in die gdLib | Version 2.0 alpha | 2005-10-07