Olá pessoal, nesse artigo irei abordar algumas funções para manipular arquivos através do FTP (File Transfer Protocol), como por exemplo: fazer a conexão com o servidor, enviar um arquivo, remover um arquivo ou diretório, entre outros.

Onde usar PHP + FTP?

O uso deste tutorial é vasto, fizemos um robô que extrai informações de um banco de dados e cria um SQL, envia por FTP para que outro sistema possa importar este SQL. Você pode fazer manipulação de qualquer tipo de arquivo, como subir fotos para o servidor, baixar backups automaticamente, entre uma infinidade de funções. O interessante é que você pode colocar um CRONJOB para fazer este serviço e automatizar algumas aplicações. A quantidade de coisas que se pode fazer com PHP + FTP é realmente absurda.

Iniciando com PHP + FTP:

Apesar de ser relativamente fácil de utilizar os métodos de FTP do PHP vamos aqui listar eles para tornar o nosso tutorial mais compreensível.

Função O que faz
ftp_alloc Aloca espaço para um arquivo a ser enviado para o servidor (uploaded)
ftp_cdup Muda para o diretório acima
ftp_chdir Muda o diretório atual em um servidor FTP
ftp_chmod Estabelece as permissões de um arquivo via FTP
ftp_close Fecha uma conexão FTP
ftp_connect Abre uma conexão FTP
ftp_delete Exclui um arquivo no servidor FTP
ftp_exec Solicita a execução de um comando no servidor FTP
ftp_fget Copia um arquivo do servidor FTP e salva em um arquivo aberto
ftp_fput Envia um arquivo aberto para um servidor php
ftp_get_option Obtém várias opções em tempo de execução da conexão FTP atual
ftp_get Copia um arquivo do servidor FTP
ftp_login Realiza o login em uma conexão FTP
ftp_mdtm Retorna a hora da ultima modificação no arquivo indicado
ftp_mkdir Cria um diretório
ftp_nb_continue Continua a receber/enviar um arquivo (sem bloquear)
ftp_nb_fget Obtém um arquivo de um servidor FTP e escreve-o para um arquivo aberto(sem bloquear)
ftp_nb_fput Grava um arquivo a partir de um arquivo aberto no servidor FTP (sem bloquear)
ftp_nb_get Obtém um arquivo do servidor FTP e escreve-o em um arquivo local (sem bloquear)
ftp_nb_put Grava um arquivo no servidor FTP (sem bloquear)
ftp_nlist Retorna a lista dos arquivos em um dado diretório
ftp_pasv Muda o modo passivo em on(ligado) ou off(desligado)
ftp_put Envia um arquivo para o servidor FTP
ftp_pwd Retorna o nome do diretório atual
ftp_quit Sinônimo de ftp_close
ftp_raw Envia um comando arbritário para o servidor FTP
ftp_rawlist Retorna uma lista detalhada dos arquivos em um diretório
ftp_rename Renomeia um arquivo ou diretório no servidor FTP
ftp_rmdir Remove um diretório
ftp_set_option Define opções diversas em tempo de execução
ftp_site Envia o comando SITE para o servidor
ftp_size Retorna o tamanho de um dado arquivo
ftp_ssl_connect Abre uma conexão SSL-FTP segura
ftp_systype Retorna o identificador do tipo do sistema do servidor FTP remoto

Definindo as informações

Vamos começar definindo as informações necessárias para realizar a conexão com o servidor FTP. Para isso irei criar um array() com o host, usuario e senha.

<?php
$dados = array(
    "host" => "ftp.faael.net",
    "usuario" => "faael",
    "senha" => "12345"
);
?>

Definidos os dados para realizar a conexão, vamos abrir a conexão com o servidor e fazer o login:

<?php
#Realizamos a conexão através da função ftp_connect() que recebe como parâmetro obrigatório o host do servidor, mas também se necessário a porta FTP, que como padrão é 21.
$fconn = ftp_connect($dados["host"]);
#Utilizamos a função ftp_login() para realizar o login no servidor, que recebe como parâmetro a conexão, usuário e senha.
ftp_login($fconn, $dados["usuario"], $dados["senha"]);
?>

Conectados no servidor FTP, podemos começar a manipulação de arquivos. Vamos começar enviando um arquivo local para o servidor FTP:

<?php
#Utilizamos a função ftp_put() para enviar o arquivo texto.txt, que está na raiz do servidor local, para a pasta public_html/ que está na raiz do servidor FTP. Passamos como parâmetro: a conexão, para onde o arquivo será copiado no servidor, o arquivo local que será copiado, modo de transferência.
ftp_put($fconn, "/public_html/texto.txt", "/texto.txt", FTP_BINARY);
?>

Para realizar o processo inverso, ou seja, copiar um arquivo do servidor FTP para o servidor local, utilizamos a seguinte função:

<?php
#Desta vez, utilizamos a função ftp_get() que irá copiar o arquivo texto.txt, que está na pasta public_html/ na raiz do servidor, para  a pasta raiz do servidor local com o nome texto.txt; Passamos como parâmetro: a conexão, para onde o arquivo será copiado localmente,  que arquivo será copiado do servidor, modo de transferência.
ftp_get($fconn, "/texto.txt", "/public_html/texto.txt", FTP_BINARY);
?>

Podemos também remover um arquivo ou um diretório:

<?php
#A função ftp_delete() remove um arquivo do servidor FTP, no caso iremos remover o texto.txt da pasta public_html/ do servidor.
ftp_delete($fconn, "/public_html/texto.txt");
#Utilizamos a função ftp_rmdir() para remover o diretório teste/ que está na raiz do servidor FTP.
ftp_rmdir($fconn, "/teste/");
?>

Há ainda várias outras funções para manipulação de arquivos, como:

<?php
#Renomeia um arquivo do servidor FTP, no caso, o arquivo texto.txt passa a chamar novotexto.txt
ftp_rename($fconn, "/texto.txt", "/novotexto.txt");
#Retorna o tamanho (em bytes) de um determinado arquivo, no caso, do arquivo texto.txt
ftp_size($fconn, "/texto.txt");
#Cria um novo diretório da raiz do servidor, nesse caso, o diretório novapasta/
ftp_mkdir($fconn, "/novapasta");
#Exibe todos os arquivos e pastas de um determinado diretório, com vários detalhes. Os valores são colocados em um array(), por isso utilizamos o laço foreach() para exibir os itens da raiz do servidor FTP.
$lista = ftp_rawlist($fconn, "/");
foreach ($lista as $item) 
{
    echo $item . "<br>";
}
?>

Depois de realizarmos todas as operações necessárias, precisamos fechar a conexão com o servidor FTP:

<?php
ftp_close($fconn);
?>

Podemos, através do PHP, realizar várias funcionalidades que um programa FTP, como o Filezilla, por exemplo, realiza. Você pode ver todas as funções disponíveis no manual do PHP. Bom pessoal, é isso. Espero que esse artigo tenha lhe ajudado, abraços.