Upload file via FTP - PHP

Asked

Viewed 447 times

0

I am trying to upload files to a specific folder of my Hostgator server, however I put the exact path of the folder and the file does not appear in the folder I have set the path, it appears in the root folder. Follows the code:

'

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

// IP do Servidor FTP
$servidor_ftp = 'br476.hostgator.com.br';

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

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

// Caminho da pasta FTP
$caminho = '/public_html/Video';

/* 
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('<br> <p class="alert alert-danger d-flex justify-content-center"> Nenhum arquivo enviado! </p>');
}

// 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('<br> <p class="alert alert-danger d-flex justify-content-center"> Arquivo já existe. </p>');
}

/* 
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('<br> <p class="alert alert-danger d-flex justify-content-center"> Arquivo muito grande. </p>');
}

/* 
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('<br> <p class="alert alert-danger d-flex justify-content-center"> Tipo de arquivo não permitido. </p>');
}

/*-----------------------------------------------------------------------------*
 * 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 '<br> <p class="alert alert-success d-flex justify-content-center"> Arquivo enviado com sucesso! </p>';
} else {
    // Se não for enviado, mostra essa mensagem
    echo '<br> <p class="alert alert-danger d-flex justify-content-center"> Erro ao enviar arquivo! </p>';
}

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

The file returns sending message successfully, but instead of appearing in the "software" folder, it appears in the "public_html" folder".

Segue abaixo a imagem do caminho dentro do servidor

Do you have a solution to this problem ?

  • 2

    You don’t have the rest of the code in your question to check if you’ve got a bar on the way but I think you’re missing one / along the way **$caminho = '/public_html/softwares/';** or further in the code

  • I put the rest of the PHP code now, that would be it ?

  • I did what you said and it worked, I had done it before and it had not worked, thank you !

1 answer

1


In the figure the folder to be considered is software and in the code is Video but that is not important, I will consider as being in the folder Video

Assuming the value of the variable $nome_arquivo be it imagem1.jpg

We know the value of the variable $caminho is /public_html/Video

concatenating the two variables to assign this value to the variable $destino we have as a result /public_html/Videoimagem1.jpg

which explains why you’re being saved at the root.

Therefore the solution is given in the @Leocaracciolo comment

$way = /public_html/Video/

therefore; $destino=/public_html/Video/imagem1.jpg

  • Got it, exactly what was going on, thanks for the explanation

Browser other questions tagged

You are not signed in. Login or sign up in order to post.