joergneu
Goto Top

PHP-Script für server2server ftp

Ich habe einen Webserver Server1 mit ftp und php und einen Webserver Server2 mit ftp, aber ohne php. Nun möchte ich über ein php-Script eine Datei per ftp direkt von Server1 nach Server2 übertragen.
Gibt es dazu bereits ein fertiges Script?

Gruß
Jörg

Content-Key: 129034

Url: https://administrator.de/contentid/129034

Printed on: April 25, 2024 at 19:04 o'clock

Mitglied: 45877
45877 Nov 10, 2009 at 11:21:00 (UTC)
Goto Top
Member: joergneu
joergneu Nov 10, 2009 at 13:22:33 (UTC)
Goto Top
Wenn google mein Freund wäre, würde ich hier nicht schreiben. Ich habe jetzt seit 2 Tagen gegoogelt.
Wie ich per php von einem lokalen Rechner aus auf den Server hochlade, weiß ich auch. Einen normalen php-ftp-client habe ich bereits auf dem webserver installiert.
Es geht um folgendes:

Server1 (ftp, php) ---> (direkt über das Internet, ohne irgendeinen lokalen Rechner) ---> Server2 (ftp, kein php)

Gruß
Jörg
Mitglied: 45877
45877 Nov 10, 2009 at 14:39:53 (UTC)
Goto Top
Hallo,

wenn die server fxp können

http://www.tutorials.de/forum/912189-post5.html
Member: Arano
Arano Nov 10, 2009 at 19:31:58 (UTC)
Goto Top
Zitat von @joergneu:
Server1 (ftp, php) ---> (direkt über das Internet, ohne
irgendeinen lokalen Rechner) ---> Server2 (ftp, kein php)

Für das auf Server1 ausgeführte PHP-Script ist doch Server1 der __lokale Server__, also:
Server1 ----> Server2 bzw.
PHP local (Srv1) ----> Server2
1 ----> 1
1 : 1

Irre ich ?
Wo ist/wäre den sonst das Problem ?


~Arano
Member: joergneu
joergneu Nov 11, 2009 at 07:02:57 (UTC)
Goto Top
Server1 ist mir physikalisch nicht zugänglich, ich kann also nicht auf die lokale Platte von Server1 zugreifen. Es handelt sich um Webspace.
Wenn mir das möglich wäre, könnte ich ja gleich mit einem normalen ftp-client arbeiten.
Hintergrund: Ich habe eine Website mit einem Webpublishing-System (Wordpress) und einer mysql-Datenbank bei 1&1. Die Datenbank kann ich per php-script sichern. Diese Sicherung und die gesamte Website will ich über ein php-script in ein zip-archiv schreiben. Dieses zip will ich (möglichst automatisiert, eine interaktive Eingabe reicht aber auch) auf einen anderen Server backuppen, also per ftp übertragen.
Vorteil: Man kann alles über das Internet anstossen, auch vom Handy (iphone) aus. Für Wordpress gibt es einen iPhone-Client. Unterwegs kann ich meine eigene Websiten ändern oder ergänzen und dann gleich vom Browser aus ein Backup anstossen. Ansonsten hätte ich ja kein Backup, wenn ich nur mit dem Handy unterwegs bin.

Gruß
Jörg
Member: nxclass
nxclass Nov 11, 2009 at 07:55:03 (UTC)
Goto Top
hab ich das nun richtig versanden:

  • php läuft auf Server 1
  • eine Datei vom Server 1 die nur per FTP zugänglich ist soll
  • auf den Server 2 per FTP übertragen werden
  • ohne das diese Datei auf dem Webspace von Server 1 zwischengespeichert werden kann
?

evtl. solltest Du dir mal 'PHP Socket' anschauen ( http://www.php.net/manual/de/book.sockets.php )

Edit:
Es gibt ggf noch eine einfachere Möglichkeit - diese wird wahrscheinlich nicht vom Provider unterstützt - ( http://php.net/manual/de/function.file-get-contents.php ) - damit kann man auch auf FTP Quellen zugreifen.
Member: joergneu
joergneu Nov 11, 2009 at 08:31:35 (UTC)
Goto Top
Die Datei auf Server1 ist zugänglich, aber sie soll direkt und nicht durch einen lokalen Rechner vermittelt auf Server2 per ftp übertragen werden.
SSH gibt es weder für 1 noch 2. Wenn ich SSH auf einem der beiden hätte, könnte ich ein Shellscript schreiben, dass mir die Datei gettet bzw. puttet.
So muss ich den Weg über php gehen.
Es wäre auch der einfachste Weg, die Website zu sichern. Ich mache das aktuell über webdav, indem ich die Dateien manuell auf meinen lokalen Rechner kopiere.
Fernziel wäre natürlich ein vollautomatisierter Ablauf: Ein php-Script erkennt, wenn sich eine Datei auf 1 geändert hat, ein anderes erstellt das zip, ein drittes überträgt das zip auf 2.

Gruß
Jörg
Member: Guenni
Guenni Nov 11, 2009 at 18:55:06 (UTC)
Goto Top
Hi joergneu,

unter => http://de2.php.net/manual/de/ref.ftp.php

findest du die ftp-Funktionen von PHP.

Ich habe zwar noch nicht damit programmiert, aber wenn ich da richtig durchblicke, müsstest du damit weiterkommen,

also etwa:

- Auf Server1 läuft PHP und ftp, auf Server2 ftp.

- Das PHP-Skript wird auf Server1 aufgerufen und stellt die ftp-Verbindung

zu Server2 her.

- Dann werden die Dateien mit der entsprechenden Funktion übertragen.


Das wäre z.B. nur mal der Verbindungsaufbau:

<?php

$ftp_res=ftp_connect("server") or die("Ätsch!!!");  

if($ftp_res){

 echo "Verbindung $ftp_res steht<br>"; /* Hier wird NUR eine Resource ausgegeben, KEIN Servername, also z.B.: Verbindung Resource id #2 steht  */  

 ftp_login ($ftp_res,"ftp","ftp") or die("Ätsch!!!");  /* Einloggen mit ftp-Benutzername und ftp-Passwort */  

 echo "Aktuelles Verzeichnis: ".ftp_pwd($ftp_res)."<br>"; /* Das aktuelle Remote-Verzeichnis ausgeben */  

 ftp_close($ftp_res);

}

?>

Also die Verbindung klappt schon mal, beim Rest: Good Luck face-smile

Gruß
Günni
Member: joergneu
joergneu Nov 19, 2009 at 15:30:43 (UTC)
Goto Top
Ich habe auf 1 zwar keinen SSH-Zugang, aber ich kann Shell-Scripte hochladen, die ich über folgendes PHP-Script ausführen kann:

<?php
$output = shell_exec('./backupdb'); # hier wird die SQL-DB gesichert, mit mysqldump --host= --user= --password= dbname > db.sql
echo "<pre>$output</pre>"; # Der Output des Shell-Scripts wird im Browser angezeigt
?>
<?php
$output = shell_exec('zip db.sql.zip db.sql'); # hier wird die SQL-DB gezippt.
echo "<pre>$output</pre>";
?>
<?php
$output = shell_exec('rm archiv.zip'); # hier wird die alte Archivdatei gelöscht
echo "<pre>$output</pre>";
?>
<?php
$output = shell_exec('./archiv'); # hier wird ein Archiv der gesamten Website inkl. SQL-DB erzeugt, mit zip -r archiv.zip /absoluter Pfad der Homepage
echo "<pre>$output</pre>";
?>
<?php
$output = shell_exec('./backup'); # hier wird das Archiv zu Server 2 übertragen, mit ncftpput -u username -p password -R hostname /remotepfad /pfad von archiv.zip auf 1
echo "<pre>$output</pre>";
?>
Member: joergneu
joergneu Nov 20, 2009 at 10:02:16 (UTC)
Goto Top
Kleine Ergänzung. Am Anfang des Scripts kann noch Folgendes stehen:
<?php
copy("http://.../?p=x", "seitex.html");
copy("http://.../?p=y", "seitey.html");
usw.
?>

Hier werden die dynamischen Webseiten, die über Permalinks erreichbar sind, als HTML-Seiten gespeichert. Die HTML-Seiten werden dann mit ins Archiv gepackt. Im Falle eines Datenverlustes oder einer Unerreichbarkeit von Server1 kommt man im Notfall so schneller an die HTML-Information heran und muss nicht erst die SQL-DB zurücksichern.

Gruß
Jörg