web-dev-qa-db-fra.com

FTP copier un fichier à un autre endroit dans le même FTP

J'ai besoin de télécharger le même fichier à 2 endroits différents dans le même FTP. Y at-il un moyen de copier le fichier sur le FTP à l'autre endroit au lieu de le télécharger à nouveau? Merci.

16
Stan

Je ne pense pas qu'il y ait un moyen de copier des fichiers sans télécharger et re-télécharger, du moins je n'ai rien trouvé de tel dans la Liste des commandes FTP et aucun client que j'ai vu jusqu'à présent n'a pris en charge quelque chose comme ceci.

10
schnaader

Il n'existe aucun moyen standard de dupliquer un fichier distant via le protocole FTP. Certains serveurs FTP prennent toutefois en charge des extensions propriétaires ou non standard. 


Certains clients FTP prennent en charge la duplication de fichiers distants. Soit en utilisant les extensions ou via une copie locale temporaire du fichier distant.

Par exemple, (client FTP WinSCP) fait prend en charge la duplication à l'aide des commandes glisser-déposer et des commandes menu/clavier

  • Il supporte l’extension FTP SITE CPFR/CPTO (supporté par exemple par le module mod_copy ProFTPD )
  • Il en résulte une duplication automatique via une copie temporaire locale, si l'extension ci-dessus n'est pas disponible.

(je suis l'auteur de WinSCP)


Une autre solution consiste à ouvrir une deuxième connexion au serveur FTP et à obliger le serveur à télécharger le fichier sur lui-même en canalisant une connexion de données en mode passif vers une connexion de données en mode actif. Cette solution est indiquée dans le réponse de @SaadAchemlal .


Note latérale: les gens confondent souvent move avec copy . Si vous voulez réellement move , la question est complètement différente. Le déplacement de fichier sur FTP est largement pris en charge.

20
Martin Prikryl

Oui, le protocole FTP lui-même peut supporter cela en théorie. Le FTP RFC 959 en traite dans la section 5.2 (voir le paragraphe commençant par "Lorsque des données doivent être transférées entre deux serveurs, A et B ..."). Cependant, je ne connais aucun client offrant ce type d'opération de contrôle à double serveur.

Notez que cette méthode peut transférer le fichier du serveur FTP vers lui-même en utilisant son propre réseau, ce qui ne sera pas aussi rapide qu'une copie de fichier locale mais serait certainement plus rapide que le téléchargement puis la remise en ligne du fichier.

9
Greg Hewgill

Le code ci-dessous permet au serveur FTP de télécharger le fichier sur lui-même (en utilisant une connexion en boucle). Le serveur FTP est nécessaire pour autoriser les modes de connexion passif et actif.

Si vous voulez comprendre les commandes ftp, en voici une liste: Liste des commandes ftp

function copyFile($filePath, $newFilePath)
{
    $ftp1 = ftp_connect('192.168.1.1');
    $ftp2 = ftp_connect('192.168.1.1');
    ftp_raw($ftp1, "USER ftpUsername");
    ftp_raw($ftp1, "PASS mypassword");
    ftp_raw($ftp2, "USER ftpUsername");
    ftp_raw($ftp2, "PASS mypassword");

    $res = ftp_raw($ftp2, "PASV");
    $addressAndPort = substr($res[0], strpos($res[0], '(') + 1);
    $addressAndPort = substr($addressAndPort, 0, strpos($addressAndPort, ')'));

    ftp_raw($ftp1, "CWD ." . dirname($newFilePath));
    ftp_raw($ftp2, "CWD ." . dirname($filePath));
    ftp_raw($ftp1, "PORT ".$addressAndPort);

    ftp_raw($ftp1, "STOR " . basename($newFilePath));
    ftp_raw($ftp2, "RETR " . basename($filePath));

    ftp_raw($ftp1, "QUIT");
    ftp_raw($ftp2, "QUIT");
}
1
Saad Achemlal

Je peux copier des fichiers entre des dossiers distants sur des systèmes Linux. Dans mon cas particulier, j'utilise un gestionnaire de fichiers très courant, PCManFM:

  • Menu "Go" -> "Connect to server"
  • Informations de connexion FTP, etc.
  • Ouvrir un nouvel onglet dans PCManFM
  • Se connecter au même serveur
  • Copier d'onglet en onglet ...

C'est un peu lent, donc j'imagine que cela pourrait être le téléchargement et le téléchargement des fichiers, mais cela se fait automatiquement et très convivial.

1
aesede

J'ai réussi à le faire en utilisant WebDrive pour monter le ftp en tant que dossier local, puis "télécharger" les fichiers à l'aide de filezilla directement dans le dossier. C’était un peu plus lent que le téléchargement, mais vous n’avez pas besoin d’espace sur votre disque dur.

0
Acelasi Eu