Fala galera!
Nesse post vou mostrar pra vocês uma forma de se enviar arquivos do computador local para o servidor remoto (hospedagem) utilizando a linguagem php com o protocolo FTP.
A princípio pode parecer algo um tanto desnecessário, pois existem inúmeros programas (a maioria deles gratuitos) que realizam essa tarefa de forma extremamente simples. Só para ficar em dois exemplos, cito o FileZilla e o WINSCP.
Mas imagine que interessante você ter um sistema em plataforma web, totalmente adaptado às suas necessidades e que possa ser acessado de qualquer lugar?
Legal né?
E fácil também. Pra fazer um script básico, utilizaremos 4 funções nativas do php, que são:
- ftp_connect: responsável por se conectar ao servidor FTP
- ftp_login: para autenticação no servidor
- ftp_put: para enviar o(s) arquivo(s)
- ftp_close: para se desconectar do servidor.
Veja o exemplo a seguir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php /* Conectar com o servidor FTP */ $conecta = ftp_connect('ftp.seudominio.com'); if(!$conecta) die('Erro ao conectar com o servidor'); /* Autenticar no servidor */ $login = ftp_login($conecta, 'seu_usuario', 'sua_senha'); if(!$login) die('Erro ao autenticar'); /* Liga modo passivo */ ftp_pasv($conecta, true); /* Envia o arquivo */ $envia = ftp_put($conecta, '/public_html/arquivos/teste.txt', 'C:Documents and SettingsAdministradorDesktopteste.txt', FTP_ASCII); if(!$envia){ die('Erro ao enviar arquivo!'); } else{ echo 'Arquivo enviado com sucesso!'; } /* Desconecta do servidor */ ftp_close($conecta); ?> |
A primeira coisa a se fazer é conectar com o servidor de FTP (geralmente ftp.seudominio.com). Depois devemos nos autenticar nesse servidor com um usuário/senha válidos. Com o modo passivo “desligado” é possível que dê erro, portanto é bom “setá-lo” como true. Feito isso executamos a função ftp_put onde passo como parâmetro a instância da conexão($conecta), o local remoto para onde será enviado o arquivo (inclusive com o nome), o arquivo local a ser enviado e o modo a ser utilizado(ASCII ou Binary). Por questõs óbvias, fechamos a conexão com o servidor após a transferência do arquivo.
Todas essas funções são “booleanas”, logo fiz as condições para ficar mais fácil de se identificar erros caso eles aconteçam.
Para ficar melhor o seu script, você pode colocar um formulário onde o usuário passe o nome do arquivo e clicando em um botão o arquivo seja enviado automaticamente.
Espero que lhe seja útil.
Abs.
Siga-me no twitter: @rafaelwendel
Grande Rafael !
Velhinho, tenho acompanhado vários tutoriais seus e parabéns, sempre ajudando. Tinha feito em meu painel uma opção para fazer upload de arquivos como fotos, arquivos em .PDF e etc… funcionou muito bem, porém estou em outro projeto onde preciso fazer o upload de arquivos.EXE porém no servidor UOLHOST WINDOWS para me complicar, acredito que com essa sua explicação irei conseguir. Um abraço.
E como faço para pegar este endereço:
C:Documents and SettingsAdministradorDesktopteste.txt
automaticamente com PHP ??
Nem sempre o arquivo vai estar nesta pasta, e então como faço ?
Fico mudando o código a toda hora ????
ola amigo, seu script é incrivel leve e direto ao ponto, para eu colocar em um form, é normal, ou tem algum segredo?
Rafael, Muuuuuuuitoo Obrigadoooooooooo Otimo Script
Muito obrigado mano, ajudou muito, muito, mesmo. Parabéns.
Rafael, agora que vi isso, porque estou precisando muito de fazer um backup do BD.. porém no meu ftp solicita a porta 21, não vi no seu script a opção para colocar a porta…
Como faço..
Agendei ele no agendador de tarefas do windows, mas não funcionou..
Dá uma luz ai meu amigo.. fico lhe muito grato e Parabéns pela sua iniciativa.
Olá.
Passe a porta 21 no segundo parâmetro da função “ftp_connect”.
Abs
obrigado pelo artigo
Rafael tranquilo?
Muito bom seu tópico, estava usando dessa forma até jul/2023, agora porém os FTP_PUT (Nem o FTP_GET) não funciona REMOTAMENTE só funciona local.
Sabe me dizer como contornar isso?
Olá Dirceu. Tudo bem e você?
Acabei de testar aqui o mesmo código que está disponível no post. Fiz 2 testes:
1. Conectando do meu servidor php local para enviar um arquivo para minha hospedagem: FUNCIONOU!
2. Conectando na minha hospedagem (abc.com) por uma outra hospedagem (xyz.com): FUNCIONOU também!
Aparentemente está tudo “ok”.
Você tem algo mais específico sobre o erro?
Abs!