Manipulando arquivos através do FTP com PHP

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.

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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
$dados = array(
"host" => "ftp.faael.net",
"usuario" => "faael",
"senha" => "12345"
);
?>
<?php $dados = array( "host" => "ftp.faael.net", "usuario" => "faael", "senha" => "12345" ); ?>
<?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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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"]);
?>
<?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"]); ?>
<?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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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);
?>
<?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); ?>
<?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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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);
?>
<?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); ?>
<?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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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/");
?>
<?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/"); ?>
<?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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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 />";
}
?>
<?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 />"; } ?>
<?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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
ftp_close($fconn);
?>
<?php ftp_close($fconn); ?>
<?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.