Fazer upload de arquivos via FTP com PHP é bastante fácil. Com a ajuda de algumas funções e algumas verificações no arquivo que você está enviando, leva apenas alguns minutos para criar um script que envia seus arquivos de maneira bem rápida.

De fato, você vai gastar mais tempo analisando o arquivo que o usuário envia através do formulário HTML, do que enviando o arquivo para o servidor.

Neste tutorial vamos criar um script que envia arquivos para o servidor via conexão FTP. O PHP nos fornecerá algumas funções para realizar toda a conexão e transferência do arquivo.

Vamos verificar apenas a extensão e tamanho do arquivo enviado, sinta-se à vontade para modificar o script conforme sua necessidade.

Como funciona o Upload de arquivos via FTP com PHP?

Vamos precisar de apenas dois arquivos:

  • index.php – O arquivo que conterá o nosso formulário HTML para o usuário enviar o arquivo;
  • envia.php – O arquivo que envia o arquivo para o servidor utilizando conexão FTP;

O arquivo envia.php estará dividido em 4 etapas, todas você verá mais adiante neste artigo.

Arquivo index.php (formulário HTML)

Nosso formulário HTML é extremamente simples, veja:

<form action="envia.php" method="post" enctype="multipart/form-data">
	Arquivo: <input type="file" name="arquivo">
	<input type="submit" value="Enviar">
</form>

Você deve se preocupar com alguns fatores sobre o formulário em si, não vou entrar em detalhes sobre eles aqui, pois já falamos sobre isso no artigo:

Portanto, leia o artigo acima para mais detalhes.

Arquivo envia.php (faz o upload via FTP)

O arquivo envia.php está dividido em quatro etapas. Vamos passar por todas elas abaixo:

Configurações do Envio de arquivos

Vamos realizar nossas configurações logo no cabeçalho do arquivo, assim não precisaremos editar o restante quando formos criar novos formulários.

// Configura o tempo limite para ilimitado
set_time_limit(0);

/*-----------------------------------------------------------------------------*
 * Parte 1: Configurações do Envio de arquivos via FTP com PHP
/*----------------------------------------------------------------------------*/

// IP do Servidor FTP
$servidor_ftp = '127.0.0.1';

// Usuário e senha para o servidor FTP
$usuario_ftp = 'luizotavio';
$senha_ftp   = 'minhasenha';

// Extensões de arquivos permitidas
$extensoes_autorizadas = array( '.exe', '.jpg', '.mp4', '.mkv', '.txt' );

// Caminho da pasta FTP
$caminho = 'arquivos/';

/* 
Se quiser limitar o tamanho dos arquivo, basta colocar o tamanho máximo 
em bytes. Zero é ilimitado
*/
$limitar_tamanho = 0;

/* 
Qualquer valor diferente de 0 (zero) ou false, permite que o arquivo seja 
sobrescrito
*/
$sobrescrever = 0;

Você pode visualizar tudo o que a primeira parte faz nos comentários do código acima.

Configurações do arquivo

As configurações do arquivo, são simplesmente os dados do arquivo enviado, como nome, tamanho e coisas do tipo.

/*-----------------------------------------------------------------------------*
 * Parte 2: Configurações do arquivo
/*----------------------------------------------------------------------------*/

// Verifica se o arquivo não foi enviado. Se não; termina o script.
if ( ! isset( $_FILES['arquivo'] ) ) {
	exit('Nenhum arquivo enviado!');
}

// Aqui o arquivo foi enviado e vamos configurar suas variáveis
$arquivo = $_FILES['arquivo'];

// Nome do arquivo enviado
$nome_arquivo = $arquivo['name'];

// Tamanho do arquivo enviado
$tamanho_arquivo = $arquivo['size'];

// Nome do arquivo temporário
$arquivo_temp = $arquivo['tmp_name'];

// Extensão do arquivo enviado
$extensao_arquivo = strrchr( $nome_arquivo, '.' );

// O destino para qual o arquivo será enviado
$destino = $caminho . $nome_arquivo;

Dentre as funções utilizadas, temos:

  • isset – Verifica se a variável está configurada;
  • strrchr – Encontra a ultima ocorrência de um caractere em uma string ;
  • exit – Termina o script onde essa função for apresentada

Verificações do arquivo enviado

Agora precisaremos verifica o arquivo enviado. Veja:

/*-----------------------------------------------------------------------------*
 *  Parte 3: Verificações do arquivo enviado
/*----------------------------------------------------------------------------*/

/* 
Se a variável $sobrescrever não estiver configurada, assumimos que não podemos 
sobrescrever o arquivo. Então verificamos se o arquivo existe. Se existir; 
terminamos aqui. 
*/

if ( ! $sobrescrever && file_exists( $destino ) ) {
	exit('Arquivo já existe.');
}

/* 
Se a variável $limitar_tamanho tiver valor e o tamanho do arquivo enviado for
maior do que o tamanho limite, terminado aqui.
*/

if ( $limitar_tamanho && $limitar_tamanho < $tamanho_arquivo ) {
	exit('Arquivo muito grande.');
}

/* 
Se as $extensoes_autorizadas não estiverem vazias e a extensão do arquivo não 
estiver entre as extensões autorizadas, terminamos aqui.
*/

if ( ! empty( $extensoes_autorizadas ) && ! in_array( $extensao_arquivo, $extensoes_autorizadas ) ) {
	exit('Tipo de arquivo não permitido.');
}

Agora podemos fazer a conexão e enviar o arquivo.

Conexão e upload via FTP com PHP

Os links para mais detalhes sobre as funções utilizadas estão ao abaixo do código. O restante está comentado no mesmo:

/*-----------------------------------------------------------------------------*
 * Parte 4: Conexão FTP
/*----------------------------------------------------------------------------*/

// Realiza a conexão
$conexao_ftp = ftp_connect( $servidor_ftp );

// Tenta fazer login
$login_ftp = @ftp_login( $conexao_ftp, $usuario_ftp, $senha_ftp );

// Se não conseguir fazer login, termina aqui
if ( ! $login_ftp ) {
	exit('Usuário ou senha FTP incorretos.');
}

// Envia o arquivo
if ( @ftp_put( $conexao_ftp, $destino, $arquivo_temp, FTP_BINARY ) ) {
	// Se for enviado, mostra essa mensagem
	echo 'Arquivo enviado com sucesso!';
} else {
	// Se não for enviado, mostra essa mensagem
	echo 'Erro ao enviar arquivo!';
}

// Fecha a conexão FTP
ftp_close( $conexao_ftp );

Dentre as funções utilizadas temos:

Código completo do arquivo envia.php

Veja nosso código completo:

<?php
// Configura o tempo limite para ilimitado
set_time_limit(0);

/*-----------------------------------------------------------------------------*
 * Parte 1: Configurações do Envio de arquivos via FTP com PHP
/*----------------------------------------------------------------------------*/

// IP do Servidor FTP
$servidor_ftp = '127.0.0.1';

// Usuário e senha para o servidor FTP
$usuario_ftp = 'luizotavio';
$senha_ftp   = 'minhasenha';

// Extensões de arquivos permitidas
$extensoes_autorizadas = array( '.exe', '.jpg', '.mp4', '.mkv', '.txt' );

// Caminho da pasta FTP
$caminho = 'arquivos/';

/* 
Se quiser limitar o tamanho dos arquivo, basta colocar o tamanho máximo 
em bytes. Zero é ilimitado
*/
$limitar_tamanho = 0;

/* 
Qualquer valor diferente de 0 (zero) ou false, permite que o arquivo seja 
sobrescrito
*/
$sobrescrever = 0;

/*-----------------------------------------------------------------------------*
 * Parte 2: Configurações do arquivo
/*----------------------------------------------------------------------------*/

// Verifica se o arquivo não foi enviado. Se não; termina o script.
if ( ! isset( $_FILES['arquivo'] ) ) {
	exit('Nenhum arquivo enviado!');
}

// Aqui o arquivo foi enviado e vamos configurar suas variáveis
$arquivo = $_FILES['arquivo'];

// Nome do arquivo enviado
$nome_arquivo = $arquivo['name'];

// Tamanho do arquivo enviado
$tamanho_arquivo = $arquivo['size'];

// Nome do arquivo temporário
$arquivo_temp = $arquivo['tmp_name'];

// Extensão do arquivo enviado
$extensao_arquivo = strrchr( $nome_arquivo, '.' );

// O destino para qual o arquivo será enviado
$destino = $caminho . $nome_arquivo;

/*-----------------------------------------------------------------------------*
 *  Parte 3: Verificações do arquivo enviado
/*----------------------------------------------------------------------------*/

/* 
Se a variável $sobrescrever não estiver configurada, assumimos que não podemos 
sobrescrever o arquivo. Então verificamos se o arquivo existe. Se existir; 
terminamos aqui. 
*/

if ( ! $sobrescrever && file_exists( $destino ) ) {
	exit('Arquivo já existe.');
}

/* 
Se a variável $limitar_tamanho tiver valor e o tamanho do arquivo enviado for
maior do que o tamanho limite, terminado aqui.
*/

if ( $limitar_tamanho && $limitar_tamanho < $tamanho_arquivo ) {
	exit('Arquivo muito grande.');
}

/* 
Se as $extensoes_autorizadas não estiverem vazias e a extensão do arquivo não 
estiver entre as extensões autorizadas, terminamos aqui.
*/

if ( ! empty( $extensoes_autorizadas ) && ! in_array( $extensao_arquivo, $extensoes_autorizadas ) ) {
	exit('Tipo de arquivo não permitido.');
}

/*-----------------------------------------------------------------------------*
 * Parte 4: Conexão FTP
/*----------------------------------------------------------------------------*/

// Realiza a conexão
$conexao_ftp = ftp_connect( $servidor_ftp );

// Tenta fazer login
$login_ftp = @ftp_login( $conexao_ftp, $usuario_ftp, $senha_ftp );

// Se não conseguir fazer login, termina aqui
if ( ! $login_ftp ) {
	exit('Usuário ou senha FTP incorretos.');
}

// Envia o arquivo
if ( @ftp_put( $conexao_ftp, $destino, $arquivo_temp, FTP_BINARY ) ) {
	// Se for enviado, mostra essa mensagem
	echo 'Arquivo enviado com sucesso!';
} else {
	// Se não for enviado, mostra essa mensagem
	echo 'Erro ao enviar arquivo!';
}

// Fecha a conexão FTP
ftp_close( $conexao_ftp );

 Download

Caso queira baixar este script para completar seus estudos, utilize o link abaixo:

Download envia_arquivos_FTP_PHP.zip

É o mesmo script descrito no artigo acima.

Dúvidas?

Em caso de dúvidas, não hesite em deixar seu comentário. Teremos o maior prazer em ajudar.