Enviando arquivos pro servidor com php via ftp

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

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. 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.

  2. 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 ????

  3. 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.

  4. 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?

    1. 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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *