Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leonardo Dias_131708

Problema com Upload de arquivo PDF

Recommended Posts

Fala pessoal,

 

Procurei um tutorial aqui no iMasters de como fazer um upload em PHP, achei um super simples e segui ele a risca.

 

Porém está dando erro na hora de subir o arquivo.

 

Segue o código que estou usando abaixo:

<form action="EnviaPDF/" method="post" enctype="multipart/form-data">
                       
                                                    <input style="cursor:pointer;" type="file" name="arquivo" id="arquivo" />
                                                    <input class="btn-upload" type="submit" value=""/>
                                          
                                            </form>

 

 

   public function EnviaPDF()
    {
        //echo "aqui"; exit;
        
        // Verificando se existe o envio de arquivos.
        if($_FILES) 
        { 
 
            // Verifica se o campo não está vazio.
            if($_FILES['arquivo']['name'] != "") 
            { 
 
                // Diretório que vai receber o arquivo.
                $dir = 'D:/_projetos/SPR/multiplataforma/app/View/arquivos/'; 
 
                // Recebe o nome do arquivo.
                $name = $_FILES['arquivo']['name'];
 
                //echo $dir; //exit;
                //echo $name; exit;
 
                if(move_uploaded_file($name,  $dir)) 
                { 
                    echo "enviado com sucesso";
                } 
                else 
                {
                    echo $dir . $name;
                }
 
            }
 
        }
    
    }

 

Me parece uma função bem simples, porém não vai de jeito nenhum.

 

Agradeço a quem puder ajudar desde já.

 

Léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função move_uploaded_file() recebe dois parâmetros, o primeiro deles é o nome temporário do arquivo, pois o PHP antes que qualquer coisa envia temporariamente seu arquivo para o servidor, para só depois executar qualquer ação, e te da o nome temporário para manipulá-lo, e esse nome encontra-se na global que você utilizou $_FILES['arquivo]['tmp_name'].

 

O segundo parâmetro é o diretório no qual você deseja mover o arquivo, e que no seu exemplo está correto.

 

O erro no seu código é que você está utilizando o nome real do arquivo, e não o nome temporário, veja como ficaria corrigido:

 

public function EnviaPDF(){
       
        // Verificando se existe o envio de arquivos.
        if($_FILES){ 
 
            // Verifica se o campo não está vazio.
            if($_FILES['arquivo']['name'] != "") { 
 
                // Diretório que vai receber o arquivo.
                $dir = 'D:/_projetos/SPR/multiplataforma/app/View/arquivos/'; 
 
                // Recebe o nome do arquivo.
                $name = $_FILES['arquivo']['name'];
                $tmp_name = $_FILES['arquivo']['tmp_name'];
 
                if(move_uploaded_file($tmp_name,  $dir)) { 
                    echo "enviado com sucesso";
                }else {
                    echo $dir.$name;
                } 
            } 
        }    
    }

 

Qualquer dúvida da um berro ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função move_uploaded_file() recebe dois parâmetros, o primeiro deles é o nome temporário do arquivo, pois o PHP antes que qualquer coisa envia temporariamente seu arquivo para o servidor, para só depois executar qualquer ação, e te da o nome temporário para manipulá-lo, e esse nome encontra-se na global que você utilizou $_FILES['arquivo]['tmp_name'].

 

O segundo parâmetro é o diretório no qual você deseja mover o arquivo, e que no seu exemplo está correto.

 

O erro no seu código é que você está utilizando o nome real do arquivo, e não o nome temporário, veja como ficaria corrigido:

 

public function EnviaPDF(){
       
        // Verificando se existe o envio de arquivos.
        if($_FILES){ 
 
            // Verifica se o campo não está vazio.
            if($_FILES['arquivo']['name'] != "") { 
 
                // Diretório que vai receber o arquivo.
                $dir = 'D:/_projetos/SPR/multiplataforma/app/View/arquivos/'; 
 
                // Recebe o nome do arquivo.
                $name = $_FILES['arquivo']['name'];
                $tmp_name = $_FILES['arquivo']['tmp_name'];
 
                if(move_uploaded_file($tmp_name,  $dir)) { 
                    echo "enviado com sucesso";
                }else {
                    echo $dir.$name;
                } 
            } 
        }    
    }

 

Qualquer dúvida da um berro ae

 

Dessa forma o sistema diz que o segundo argumento não pode ser um diretório, é isso mesmo?

 

 

The second argument to copy() function cannot be a directory in

 

abraços,

Léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, falha minha, o caminho para o arquivo precisa ser completo, veja:

 

move_uploaded_file($tmp_name,  $dir.$name)

 

Concatena $dir com $name que agora sim vai ficar com o caminho do arquivo completo!

 

:joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maravilha Fernando!

 

Agora funcionou perfeitamente, ele primeiro cria esse arquivo temporário da pasta Temp do próprio Windows e depois move para o servidor né?

 

Não sabia dessa do arquivo temporário.

 

Valeu mesmo!

abraços,

Léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo!

 

Se ajudar, existem outras formas de você validar o envio do arquivo.

Apenas da forma como você fez, ele verifica se ouve ou não envio HTTP de arquivos, porém não valida por exemplo a extensão.

 

Aqui você pode validar a extensão do arquivo: Clique aqui

 

Agora, para validar por exemplo o tamanho do arquivo:

 

<?php 

$tamanho_permitido = 1024 * 1024 * 2; /* 2 Mb (Pois é em bytes) */

if($_FILES['arquivo']['size'] > $tamanho_permitido){
    echo "Arquivo muito grande";
}

?>

 

 

Existem infinitas formas de validar o envio de arquivos, e essa talvez não seja a mais eficaz, mais sim a mais simples.

 

Qualquer dúvida, posta ae o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.