PHP Upload: Mit dem FTP verbinden
Im nächsten Block wird die Verbindung zum FTP Server hergestellt, der Passiv Modus wird aktiviert (wenn kein Passiv Modus vom Server gewünscht wird, dann statt True, False eintragen) und schließlich gecheckt ob eine Verbindung zustande gekommen ist. Tritt hier ein Fehler auf, checkt noch mal alle Parameter, welche ihr am Anfang bei den Variablen festgelegt habt. Dieser Teil ist wieder in der allseits beliebten if Anweisung eingebettet, welche erst checkt wenn der aus dem obigen Formular der Submit Button gedrückt wird.
Auf eine else Zweig verzichte ich, da er dann einfach nix mehr tun muss
if ($submit=="upload") { // Login am FTP Server
$verbindung = ftp_connect($server);
$login = ftp_login($verbindung,$username,$password); // Passiv Mode ?
ftp_pasv($verbindung,True); // Verbindung OK ?
if ((!$verbindung) || (!$login)) {
echo "FTP connection has failed!<br>";
echo "Attempted to connect to server<br>";
die;
} else {
echo "Connected to server.<br>";
}
Sind wir mit dem FTP Verbunden geht’s ans uploaden der Datei (es kann immer nur eine übertragen werden.). Die Datei wird im $uploadir mit dem unverfänglichen Namen newfile.fil abgelegt, mit normalen Rechten (sollte 644 sein) und als Besitzer sollte automatisch der festgelegt sein, welcher sich soeben mittels diesem Script eingeloggt hat. Ein ganz normaler FTP Upload also. Nach dem Upload wird ins $uploadir gewechselt und mittels getimagesize ein Array mit Bilddaten angelegt, selbiges wandert in die Variable $bild. Dort stecken nun Angaben über Bildtyp (der Inhalt von $bild[2] liefert dann eine 1,2,3 oder 4 zurück, 2 Ist ein JPG, 1= GIF, 3=PNG, 4 müsste BMP sein), Breite des Bildes ($bild[0]) und Höhe des Bildes ($bild[1]). Den Typ benötigen wir nun zum umbenennen der Datei. Also wird dieser Typ in die Variable $ext gelegt. Um Doppelnamen und Verwechslungen möglichst zu vermeiden lasse ich den Bildnamen folgendermaßen anlegen: ein Namensteil (gallery) + ID des Datensatzes + Unix Timestamp + $ext. Das sollte ausreichen einen einigermaßen eindeutigen Namen zu generieren und kann später in einer Gallery zusätzlich ausgenutzt werden. Diesen zusammengesetzten Namen stecken wir in die Variable $renfile und benennen immer noch mit den FTP Funktionen die Datei nach $renfile um. Anschließend wird die FTP Verbindung geschlossen.
// Upload der Files
ftp_put($verbindung,"$uploadir/newfile.fil",$userfile,FTP_BINARY);
ftp_chdir($verbindung,$uploadir); // Bild erkennen und umbenennen
$bild = getimagesize("$DOCUMENT_ROOT/$uploadir/newfile.fil");
if ($bild[2]==2)
$ext = "jpg";
elseif ($bild[2]==1)
$ext = "gif";
elseif ($bild[2]==3)
$ext = "png";
$renfile = "gallery$id-".time().".".$ext;
ftp_rename($verbindung,"newfile.fil",$renfile);
ftp_quit($verbindung);
Der nächste Abschnitt, dient lediglich zur Kontrolle, er kann ausgeklammert oder eggelassen werden aber wenn mal was schief geht, kann man sich so wenigstens ungefähr denken an welcher Stelle. Sollte bei den Letzten Schritten etwas schief gegangen sein, so wird VOR dem trennen der FTP Verbindung das Script abgewürgt (die();), schließlich wollen wir keinen Müll an die Datenbank übertragen.
// Ausgabe der Variablen für MySQL echo "<h1>Ausgabe der MySQL Variablen</h1>"; echo "<i>GalleryID: </i>".$id."<br>"; echo "<i>Dateiname: </i>".$renfile."<br>"; echo "<i>Bildbreite: </i>".$bild[0]."<br>"; echo "<i>Bildhöhe: </i>".$bild[1]."<br>"; } else die();