per FTP von Server1 zu Server2

elch2

Grünschnabel
ich möchte eine Datei von Web-Server1 zu Web-Server2 schicken.
Ergebnis: Datei kommt am Web-Server2 im richtigen Verzeichnis an.
Auf Web-Server1 wird die alte Datei gelöscht.

Problem ist nur, die Dateigröße von ursprünglich von 20k ist auf Web-Server2 auf 0k geschrumpft, also nix drin.

PHP:
<?php

ini_set("display_errors", 1);
error_reporting(E_ALL);


$von = $_SERVER['DOCUMENT_ROOT']."ordner1/420.pdf";
$zu = fopen ("ftp://name:passw@server2.de/archiv3/420.pdf", "w");


fopen($von, $zu);
unlink($von);

echo $von . "<br> :..von"; 
echo $zu  . "<br> :..zu";
// Ende Datei per FTP von Server zu Server ...
?>

Mit der erscheinenden Fehlermeldung kann ich nicht viel anfangen.
PHP:
1
Warning: fopen() expects parameter 2 to be string, resource given in /var/kunden/webs/ordner1/upload4.php on line 24
/var/kunden/webs/ordner1/420.pdf
:..vonResource id #3
:..zu

kann mir einer weiterhelfen wo ich was noch ändern muss, damit auch die Daten übertragen werden?
 
1. [phpf]fopen[/phpf] kopiert keine Dateien.
Es öffnet Dateien zum Lesen, Schreiben oder Anhängen.
Und erstellt die Datei, falls sie eben nicht vorhanden ist.

2. Warum benutzt du nicht die dafür vorgesehenen FTP Funktionen?
 
1. [phpf]fopen[/phpf] kopiert keine Dateien.
Es öffnet Dateien zum Lesen, Schreiben oder Anhängen.
Und erstellt die Datei, falls sie eben nicht vorhanden ist.

2. Warum benutzt du nicht die dafür vorgesehenen FTP Funktionen?

1. gibt es denn für fopen() keinen anderen Befehl? z.B. copy(), lässt meines Wissens nur keine URL's zu.
Es kommt auf dem Zielserver ja auch was an oder ist es das was fopen neu angelegt hat?
Mit
PHP:
("ftp://name:passw@server2.de/archiv3/420.pdf", "w");
hatte ich schon öfter gearbeitet, klappt ja auch, nur da muss einer 'daneben sitzen'.
Frage: kann man diesen einfachen Code nicht noch sinnvoll ergänzen, damit Server 1 die Funktion 'alleine' durchführen kann?

2. vielen Dank für den Link.
Ist unter 1. überhaupt keine vertretbare Lösung in Sicht, muss ich mich mit dem Beispiel unter Deinem Link auseinandersetzen?
 
Mit fopen() würde es auch gehen:

Datei lokal öffnen, auslesen und Dateihandle wieder schließen.
Datei über FTP Protokoll öffnen, Inhalt reinschreiben und schließen.
Datei(inhalt) ist kopiert.
Bin mir aber nicht sicher, ob das so wirklich bei allen Dateiinhalten funktioniert... Ausführbare Dateien usw.
 
Hi, so müsste es gehen:
PHP:
$lp = fopen($von, 'rb');
$rp = fopen($zu, 'wb');

while(!feof($lp))
{
  fwrite($rp, fread($lp, 4096));
}

fclose($lp);
fclose($rp);

unlink($von);

Zur Erklärung: Die Parameter 'rb' und 'wb' sorgen dafür, dass auch Binärdateien übertragen werden können. Die Schleife wird benutzt, um Resourcen zu schonen und immer nur einen Teil der Datei zu übertragen.

Hoffe das hilft weiter.
 
Öhms, also ich brauche das auch gerade... aber bei mir lübbt das nicht :-(

Wisst ihr wie, das komplett aussehen könnte(der funktionierende Quelltext)?
 
Zurück