FTP copiar um ficheiro para outro local no mesmo FTP
Preciso de enviar o mesmo ficheiro para 2 locais diferentes no mesmo FTP. Existe uma maneira de copiar o arquivo no FTP para o outro lugar em vez de carregá-lo novamente? Obrigado.
9 answers
Eu não acho que haja uma maneira de copiar arquivos sem baixar e recarregar, pelo menos eu não encontrei nada parecido com isso na lista de comandos FTP e nenhum cliente que eu tenha visto até agora suportou algo assim.
Alguns clientes de FTP suportam a duplicação de ficheiros remotos. Usando as extensões ou através de uma cópia local temporária do ficheiro remoto.
Por exemplo O cliente FTP do WinSCP suporta a duplicação usando tanto o comando drag&drop como o menu / teclado:
- suporta o
SITE CPFR
/CPTO
Extensão FTP (suportada, por exemplo, pelo módulo ProFTPD mod_ copy) - recai sobre uma duplicação automática através de uma cópia local temporária, se a extensão acima não estiver disponível.
(sou o autor do WinSCP)
Outra solução consiste em Abrir uma segunda ligação ao servidor FTP e fazer com que o servidor envie o ficheiro para si próprio, encaminhando uma ligação de dados de modo passivo para uma ligação de dados de modo activo. Esta solução é mostrado na resposta por @SaadAchemlal .
Nota Lateral: as pessoas confundem frequentemente movimento comcópia . No caso de você realmente querer mover , então essa é uma pergunta completamente diferente. Mover o ficheiro em FTP é amplamente suportado.
SIM, o protocolo FTP em si pode suportar isso em teoria. O FTP RFC 959 discute isto na Secção 5.2 (ver o parágrafo a começar por " Quando os dados devem ser transferidos entre dois servidores, A E B..."). No entanto, não conheço nenhum cliente que ofereça este tipo de operação de controle de servidor duplo.
Note que este método pode transferir o ficheiro do servidor FTP para si próprio usando a sua própria rede, que não será tão rápida como uma cópia de ficheiro local, mas que quase certamente seja mais rápido do que baixar e, em seguida, recarregar o arquivo.
Posso copiar ficheiros entre pastas remotas em sistemas baseados em Linux. No meu caso particular, estou a usar um gestor de Ficheiros muito comum PCManFM:
- Menu " Go "-- > "Connect to server"
- Informação de autenticação FTP, etc
- abrir uma página nova no PCManFM
- Ligar ao mesmo servidor
- copiar da página para a página...
O código abaixo faz com que o servidor FTP envie o ficheiro para si próprio (usando a ligação loopback). Ele precisa do servidor FTP para permitir o modo de conexão passivo e ativo.
Se quiser compreender os comandos ftp aqui está uma lista deles: Lista de comandos 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");
}
Consegui fazer isto usando o WebDrive para montar o ftp como uma pasta local, e depois" transferir " os ficheiros usando o filezilla directamente para a pasta. Foi um pouco mais lento do que o download normal é, mas você não precisa ter o espaço em seu hdd.
clFTP.Rename(lbList.Items[lbList.ItemIndex], '/z/a.txt');
FillDirList();
Podes fazer isto a partir do Painel C.
- entra no teu Painel C. Entra no Gestor de ficheiros.
- Encontre o ficheiro ou pasta que deseja duplicar.
- Clique com o botão direito e escolha a cópia.
- Digite o novo diretor que você quer copiar.
Pode mudar o nome do ficheiro a ser copiado para a localização completa do seu resultado desejado.
Por exemplo: Se quiser mover o ficheiro".txt "na pasta" NewFolder " você pode escrevê-la como
ftp> rename file.txt NewFolder/file.txt
Isto funcionou comigo.