2016-04-05 23 views
0

Ich habe gerade Phpseclib für mich selbst entdeckt und möchte es für meinen Code verwenden. Irgendwie kann ich nicht herausfinden, wie ich Dateien aus einem sftp-Verzeichnis in ein anderes sftp-Verzeichnis kopieren könnte. Wäre toll, wenn Sie mir dabei helfen könnten.Wie kopiere oder verschiebe ich entfernte Dateien mit phpseclib?

zB:

Kopie aller Dateien von

/jn/xml/

zu

/jn/xml/backup/

Antwort

0

Versuchen Sie folgendes:

<?php 
include('Net/SFTP.php'); 

$sftp = new Net_SFTP('website.com'); 
if (!$sftp->login('user', 'pass')) { 
    exit('bad login'); 
} 

$sftp->chdir('/jn/xml/'); 
$files = $sftp->nlist('.', true); 
foreach ($files as $file) { 
    if ($file == '.' || $file == '..') { 
     continue; 
    } 
    $dir = '/jn/xml/backup/' . dirname($file); 
    if (!file_exists($dir)) { 
     mkdir($dir, 0777, true); 
    } 
    file_put_contents($dir . '/' . $file, $sftp->get($file)); 
} 
+0

Dies erstellt ein lokales Verzeichnis und downloadet alle Dateien in der Remote-SFTP auf den lokalen Computer, in diesem Verzeichnis erstellt. Es ist nicht, was Jan Neuman gefragt hat. –

+1

@LawrenceGandhar - Sieht so aus, als gäbe es einen Tippfehler. Ich habe ein Verzeichnis erstellt, aber nicht in das neu erstellte Verzeichnis geschrieben. Ich habe den Code aktualisiert. Aber zögern Sie nicht, im Fall von offensichtlichen Tippfehlern, anstatt tatsächlich zu bearbeiten und zu korrigieren! – neubert

+0

Vergleichen: http://stackoverflow.com/posts/36558913/revisions – neubert

-2
$dir = "/jn/xml/"; 
$files = $sftp->nlist($dir, true); 
foreach($files as $file) 
{ 
    if ($file == '.' || $file == '..') continue; 
    $sftp->put($dir."backup".'/'.$file, $sftp->get($dir.'/'.$file); 
} 

Dieser Code wird Inhalt von "/ jn/xml /" Verzeichnis "/ jn/xml/backup" kopieren.

0

Ich denke, das sollte tun, was gefragt wurde.

Ich verwendete Composer, um phpseclib zu importieren, also ist dies nicht genau der Code, den ich getestet habe, aber von den anderen Antworten sollte die Syntax korrekt sein.

<?php 
include('Net/SFTP.php'); 
// connection 
$sftp = new Net_SFTP('website.com'); 
if (!$sftp->login('user', 'pass')) { 
    exit('bad login'); 
} 
// Use sftp to make an mv 
$sftp->exec('mv /jn/xml/* /jn/xml/backup/'); 

Hinweise:

  • , wenn eine der Verzeichnisse nicht existieren, wird dies fehlschlagen. tun echo $sftp->exec(..., um den errormsg zu bekommen.
  • erhalten Sie eine Warnung erhalten, weil/jn/xml/backup/innen/jn/xml/ich die Dateien bewegen würde raten
  • Sie 'Net/SSH2' könnte /jn/xml.bak/ Klasse , da du nur ein mv machst und keine Dateien übertragst. Tatsächlich ist die exec eine Funktion der SSH2-Klasse, und SFTP erbt sie von SSH2.