Transfer von Dateien mit SFTP und entweder mit PHP oder shell - /terminal-Skript
Brauche ich, um ein Skript zu schreiben, welches als cron-job jede Nacht, die transfers, einige berichten von Dateien per sftp auf einen anderen server.
Die report-Dateien werden erstellt, jede Nacht mit einem anderen cron-im format " support_[date].csv' & 'download_[Datum].csv'.
Frage ich mich, ob Ihr irgendwelche Hinweise, wie das folgende zu tun:
- Finden Sie die 2 Dateien erstellt spätestens [Datum]
- Kopieren Sie diese Dateien auf einem anderen server mit SFTP
Ich habe versucht, mehrere PHP-Skripte unter Verwendung der ssh2 extension, aber ohne Erfolg. Gibt es einen Weg, es zu tun mit einem shell-Skript aus? Es ist nicht etwas, was ich bin äußerst vertraut mit, um ehrlich zu sein (damit man auf der PHP-route zunächst)
Dies war eines meiner PHP-Skripte, die hat nicht funktioniert:
$src = 'test.csv';
$filename = 'test.csv';
$dest = '/destination_directory_on_server/'.$filename;
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
//Create SFTP session
$sftp = ssh2_sftp($connection);
$sftpStream = fopen('ssh2.sftp://'.$sftp.$dest, 'w');
try {
if (!$sftpStream) {
throw new Exception("Could not open remote file: $dest<br>");
}
$data_to_send = file_get_contents($src);
if ($data_to_send === false) {
throw new Exception("Could not open local file: $src.<br>");
}
if (fwrite($sftpStream, $data_to_send) === false) {
throw new Exception("Could not send data from file: $src.<br>");
} else {
//Upload was successful, post-upload actions go here...
}
fclose($sftpStream);
} catch (Exception $e) {
//error_log('Exception: ' . $e->getMessage());
echo 'Exception: ' . $e->getMessage();
if($sftpStream) {fclose($sftpStream);}
}
Diese waren die Fehlermeldungen, die ich erhielt:
Warnung: fopen() [function.fopen]: URL
file-access is disabled in the server
Konfiguration in
/path_to_script/sftp-test.php auf der Linie
17Warning: fopen(ssh2.sftp://Ressourcen-id
3/destination_directory_on_server/test.csv)
[function.fopen]: failed to open
stream: no suitable wrapper könnte
finden Sie in /path_to_script/sftp-test.php
in Zeile 17 Ausnahme: Konnte nicht geöffnet werden
remote-Datei:
/destination_directory_on_server/test.csv -
InformationsquelleAutor WastedSpace | 2010-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
über das terminal zu finden, das Letzte Datum in der Datei, die Sie verwenden können
ls -1tr
. Dann scp (nicht sftp) kopieren/übertragen von Dateien überBeispiel
überprüfen Sie die man-page von scp für die Nutzung
Muchos kudos zu ghostdog74! Gelungen, diese arbeiten, sondern mit sftp. Zuerst habe ich es geschafft, bis key-Authentifizierung, dann teilweise mit ghostdog74 script-ich Tat dies und es funktionierte perfekt! cd /directorywithfilesin latest_download=$(ls -1tr-download* | tail -1) latest_support=$(ls -1tr-support* | tail -1) sftp [email protected] <<EOF cd /dir_to_copy_to $latest_download $latest_support EOF Dank!
Hoppla, schwer zu Lesen. Beantworte meine eigene Frage...
InformationsquelleAutor ghostdog74
Muchos kudos zu ghostdog74! Gelungen, diese arbeiten, sondern mit sftp.
Zuerst habe ich es geschafft, bis key-Authentifizierung, dann teilweise mit ghostdog74 script-ich Tat dies und es funktionierte perfekt!
Dank!
InformationsquelleAutor WastedSpace
Unter anderem Probleme mit ghostdog74 Methode ist, dass es nicht tragbar. Meine Empfehlung wäre die Verwendung von phpseclib, ein Reine PHP SFTP-Implementierung.
InformationsquelleAutor
Wird das nicht funktionieren von PHP auf Ihrem server, da Ihre php.ini hat deaktiviert die remote-Wrapper
Jedoch, können Sie einfach lassen Sie Ihre cron-job-Aufruf ein shell-Skript, das verwendet
sftp
oderrsync
direkt. Sie müssen nicht, dies zu tun mit PHP.Ich bin Stimmabgabe zu bewegen, diese zu ServerFault zu bekommen bessere Unterstützung für shell-scripting.
Sorry, ich bin nicht Experte in shell-scripting, das ist der Grund, warum ich vorgeschlagen verschieben der Frage zu SF. Die Antwort von @ghostdog unten sieht irgendwie hilfreich.
InformationsquelleAutor Gordon
Die Antwort richtig ist es, die in der Fehlermeldung:
Warnung: fopen() [function.fopen]: URL file-access is disabled in the server configuration
bedeutet, dass Datei-Zugriff über URL-Wrapper deaktiviert ist, in der server-Konfiguration.
Überprüfen Sie Ihre PHP-Konfiguration, vor allem allow_url_fopen. In der PHP-Dokumentation sagt: "Diese Einstellung kann nur eingestellt werden, in php.ini aus Sicherheitsgründen", so überprüfen Sie es.
Siehe auch fopen: "Wenn PHP entschieden hat, dass es sich bei filename um ein registriertes Protokoll handelt, und ist dieses Protokoll als eine Netzwerk URL registriert, wird PHP überprüfen, um sicherzustellen, dass allow_url_fopen aktiviert ist. Wenn es ausgeschaltet ist, gibt PHP eine Warnung ausgeben und die fopen-Aufruf fehl." Soweit ich sagen kann, das ist genau das, was passiert ist.
Wenn Sie nicht können oder nicht allow_url_fopen aktivieren, haben Sie noch einige Optionen:
ghostdog74 Antwort ist ein schönes Beispiel.
InformationsquelleAutor Piskvor
Versuchen Sie, wie folgt (Shell)
InformationsquelleAutor Farid Haq