Datei auf anderen Server schreiben

DiDiJo

Erfahrenes Mitglied
Hey Leute,

ich hab mir nen Abgreifskript für meine große Bücher Datenbank geschrieben was mir eine Seite quasi aufruft und mir ISBN, Autor, Titel, Beschreibungstext und das Bild raussucht. Soweit kein Problem.

Ich habe es auch geschafft, die umgeleitetes Bilder abzugreigen und lokal auf meine Platte zu speichern. Aber jetzt kommt es ...

Da ich mein Script lokal (per XAMPP) ausführe, kann ich meine Bilder (wie gesagt) lokal speichern ... sobald ich aber vor die "Zieladresse" (des Bildes) ein http://X-BeliebigeAdresseMitSchreibrechten hänge kriege ich folgende Fehlermeldung:

Code:
Warning: fopen(http://X-BeliebigeAdresseMitSchreibrechten/book_cover/TestBild.jpg) [function.fopen]: failed to open stream: HTTP wrapper does not support writeable connections in C:\xampp\htdocs\Bookcatcher_buchkatalog\bookcatcher2.php on line 25

und hier mal meine Funktion :
PHP:
function writeImage($pfad,$title){
	$pfad = str_replace("&","&",$pfad);
	
	$http=new http_class;
	$http->user_agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
	$url = $pfad;
	$arguments = array();
	
	$http->GetRequestArguments($url,$arguments);
	$error=$http->Open($arguments);
	$error=$http->SendRequest($arguments);
	$error=$http->ReadReplyHeaders($headers);
	
	$titel = safeFilename($title);
	$targetImage = 'http://w007e871.dd8328.kasserver.com/pictures/book_cover/'.$titel.'.jpg';
	
	$fp = fopen($targetImage, 'w+');
	for(;;)
	{
		$error=$http->ReadReplyBody($body,1000);
		if($error!="" || strlen($body)==0) break;
		fwrite($fp, $body);
	}
	fclose($fp);
	$http->Close();
	return basename($targetImage);
}

ich musste das so kompliziert machen, da dass Bild was ich eigentlich abgreife gar kein Bild ist sondern eine dll Datei die nur irgendwie auf erin Bild zeigt.

Wie kriege ich es nun hin, dass ich meine Bilder auf meinem Server landen. Ich vermute mal ich müsste ne art ftp Upload simulieren oder so ... allerdings habe ich keine Ahnugn wie ich daran gehen soll....

vlt hat ja jemand ne Idee
 
Von welchem Server aus versuchst du die Datei zu ändern?

Über "fopen" kannst du keine HTTP-Protokoll öffnen und dann noch Dateien schreiben. Liegen die Datein auf den selben Server wie der Skript, dann verwende doch relative Pfade.
Zudem, vergiss die CHOMD-Rechte nicht.

PHP:
    $targetImage = 'pictures/book_cover/'.$titel.'.jpg';
 
Zuletzt bearbeitet:
ok ... wie gesagt ... meine Dateien liegen LOKAL auf meienr c:\ Platte und sollen auf einen FTP Server...

aber ich glaub ich hab es:
PHP:
function conntectToFTP() {	
	global $connection_id;
	$benutzername = "name";
	$passwort = "passwort";	
	$login_result = ftp_login($connection_id, $benutzername, $passwort);
}

function closeFTP() {	
	global $connection_id;
	ftp_quit($connection_id);
}

function sendFileToServer($pfad) {
	global $connection_id;
	$zieldatei = "pictures/book_cover/".$pfad;
	$lokale_datei = 'book_cover/'.$pfad;
	$upload = ftp_put ($connection_id, $zieldatei, $lokale_datei, FTP_BINARY);	
	if ($upload) {
		unlink($lokale_datei);
	}
}

ganz am anfang noch ein
PHP:
$ftp_server = "ftp.xyz.com";
$connection_id = ftp_connect($ftp_server);	
ftp_pasv($connection_id,TRUE);

und am ende ein
PHP:
closeFTP();

das 'sendFileToServer(pfad)' kann man dann an jeder beliebigen stelle ausführen
 
Hi,

ja mit "ftp_put" müsste das gehen. Zumindest klappt das meinem eigenen FTP-Viewer problemlos.
Es wäre vielleicht davor noch notwendig, den Ordner wo die Bilder hinsollen, mit ftp_chmod() bearbeiten, um ggf. die notwendigen Schreibrechte zu legen.

Mit den Recht "0777" müsste es gehen, aber vorsichtig, 0777 ist eine erlaubnis für alles, sollte dir jetzt nur zum testen helfen.
 

Anhänge

  • ftp.jpg
    ftp.jpg
    36,3 KB · Aufrufe: 30
Zurück