Bilder hochladen, verkleinern, auf ANDEREN Server per FTP schieben?

chris4712

Erfahrenes Mitglied
Hallo!

Ich möchte Bilder hochladen, verkleinern, und dann per FTP auf einen anderen Server schieben. Einzeln ist es kein Problem. Zusammen bekomme ich es nicht hin:

Der Code zum Verkleinern:
PHP:
function resize_image($source, $dest, $maxW, $maxH)
{ 
/*
Variablen:
$source = Temporäre Dateiname nach dem Hochladen
$dest = Lokaler Pfad und Dateiname für die zu erstellende Datei
$maxW und $maxH = Groessenangaben
*/
 
$imagedata = getimagesize($source); // Bildgroesse auslesen
$w = $imagedata[0];
$h = $imagedata[1];
 
if ($h >= $w) {
$wn = round($w/($h/$maxH));
$hn = $maxH;
} 
else {
$hn = round($h/($w/$maxW));
$wn = $maxW;
}
$dst_img=ImageCreateTrueColor($wn,$hn);
$src_img=ImageCreateFromJpeg($source);
ImageCopyResampled($dst_img,$src_img,0,0,0,0,$wn,$hn,$w,$h);
imagejpeg($dst_img, $dest); // Ausgabe Datei erstellen. Diese Ausgabe muss auf den anderen FTP Server
 
imagedestroy ($src_img);
imagedestroy ($dst_img); 
}

Die original Datei bekomme ich auch ohne Probleme auf den anderen Server per FTP geschoben. Aber wie mach ich es dass auch die verkleinerte Datei verschoben wird?
Soll ich sie auf den einem Server (wo das Skript ausgeführt wird) zwischenspeichern?

Gruß

Christian
 
Ich arbeite da mit meiner FTP-Klasse, die bietet mir die Methode write() welche mir ermoeglicht das Bild ohne es zwischenspeichern zu muessen gleich auf den FTP-Server zu schreiben.
Dazu fang ich mit Hilfe des Output-Buffers die Bildausgabe ab und hol mir den Buffer dann in eine Variable.
PHP:
ob_start();
imagejpeg($thumbimage);
=$imagedata=ob_get_contents();
ob_end_clean();
write_ftp('thumbs/'.$gallery['gallery'].'/'.$filename,$imagedata);
write_ftp() ist hier eine Wrapper-Funktion die ich fuer meine Website einsetze. Diese sieht so aus:
PHP:
function write_ftp($filename,$data)
{
	$ftp=new ftpconnection(FTPHOSTNAME,FTPUSERNAME,FTPPASSWORD);
	$ftp->chdir(FTPHOME);
	$ftp->write($filename,$data);
	$ftp->disconnect();
	unset($ftp);
}
Falls Du meine Klasse nutzen willst, die kannst Du entweder hier in der Tutorials-Section finden, oder ueber den Link in meiner Signatur.
 
Hallo Dennis,

danke für Deine schnelle Antwort.
Muss aber zugeben dass ich deine FTP Funktion nicht ganz kapiere :)
Hab es mit den PHP eigenen Mitteln versucht -> Geht nicht. Zumindest bei mir.

PHP:
function resize_image($source, $filename, $dest, $maxW, $maxH)
{ 
GLOBAL $DomainDB; // Beinhaltet Verbindungsdaten für den FTP Server
GLOBAL $UserGalleryDir; // Wo sollen die Bilder auf dem anderen Server gespeichert werden?
 
$imagedata = getimagesize($source);
$w = $imagedata[0];
$h = $imagedata[1];
 
if ($h >= $w) {
$wn = round($w/($h/$maxH));
$hn = $maxH;
} 
else {
$hn = round($h/($w/$maxW));
$wn = $maxW;
}
$dst_img=ImageCreateTrueColor($wn,$hn);
$src_img=ImageCreateFromJpeg($source);
ImageCopyResampled($dst_img,$src_img,0,0,0,0,$wn,$hn,$w,$h);
//imagejpeg($dst_img, $filename);
 
ob_start(); 
imagejpeg($dst_img); 
$imagedata=ob_get_contents(); 
ob_end_clean();
 
$conn_id = FTPConnect($DomainDB); // Verbindung zum FTP Server aufbauen (Verbindungsdaten werden anhand einer SessionID aus der angegebenen DB ausgelesen
FTPChangeDir($conn_id, $UserGalleryDir); // In das gewünschte Verzeichnis gehen
$upload = ftp_put($conn_id, $filename, $imagedata, FTP_ASCII); // Soll die Datei hochladen
echo $upload;
FTPDisconnect($conn_id); // Verbindung beenden
imagedestroy ($src_img);
imagedestroy ($dst_img);
}

Wenn ich in bei der PHP Funktion ftp_put den angelegten Buffer übertragen möchte, geht dies nicht.
Dies ist, so denke ich, das ganze Problem. Ich hab nur im Moment keine Idee warum es nicht geht.

Gruß

Christian
 
Bei den PHP-eigenen FTP-Funktionen gibt es keine Moeglichkeit eine Datei aus einer Variable zu erstellen. Da musst Du immer eine lokal existente Datei hochladen.
 
Zurück