Upload de arquivos é a possíbilidade de você enviar um arquivo local para o servidor através do seu navegador.

Antes de colocarmos a mão na massa e fazer o formulário, vamos primeiro ver as limitações do servidor em relação ao upload de arquivo. Por padrão o PHP limita em 2MB o tamanho máximo dos arquivos a serem enviados a ele. Para aumentar este limite, vamos editar o arquivo php.ini.

O PHP limita o tamanho através de três variváveis que são vistas abaixo.

  • memory_limit: limite máximo de memória que o PHP poderá usar para cada uma das páginas que ele gerar. Este valor tem que ser igual ou maior que o upload_max_filesize;
  • file_uploads: Diz para o PHP se os Upload estão ou não ativados;
  • upload_max_filesize: limite máximo de tamanho que o PHP aceitará upload. Se você enviar um arquivo de um BYTE a mais o PHP irá ignorar o arquivo antes que você possa manipula-lo.
Arquivo php.ini do meu PHP:
; Quantidade máxima de memória um script pode consumir
; http://php.net/memory-limit
memory_limit = 128M

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Permitir o upload de arquivos.
; http://php.net/file-uploads
file_uploads = On

; Tamanho máximo permitido para upload de arquivos.
; http://php.net/upload-max-filesize
upload_max_filesize = 128M

Upload de imagens a primeira vista pode ser até simples. Mais você deve ter um cuidado muito especial com isso. Sabe por quê?

Primeiro grande motivo é que através do upload, você esta abrindo uma porta para enviar arquivos para o servidor. E isso pode ser muito prejudicial se não tratado com carinho.

A maior parte dos ataques de hacker se da através da tentativa de enviar um arquivo .php para o servidor. Se ele conseguir enviar este arquivo ele tem acesso a muitos itens dentro do servidor.

Para enviar arquivos, você tem que definir o enctype do seu como "multipart/form-data" e o atributo method="post".  Agora temos um form que aceita enviar arquivos.

Veja abaixo um form simples:

<form method="post" enctype="multipart/form-data">
   Selecione uma imagem: <input name="arquivo" type="file" />
   <br />
   <input type="submit" value="Salvar" />
</form>

Agora temos um sistema muito simples de envio de arquivos. Usamos um <input type="file" /> para criar um campo de envio de arquivo. Veja como ficou nosso script rodando no firefox:

Agora vamos alterar o action="recebeUpload.php", para que o upload seja direcionado para a página recebeUpload.php. Veja o formulário completo:

<form method="post" enctype="multipart/form-data" action="recebeUpload.php">
   Selecione uma imagem: <input name="arquivo" type="file" />
   <br />
   <input type="submit" value="Salvar" />
</form>

Veja o exemplo rodando em /code/10031/form.html.

Agora vamos criar o arquivo recebeUpload.php.

$destino = 'imagens/' . $_FILES['arquivo']['name'];

$arquivo_tmp = $_FILES['arquivo']['tmp_name'];

move_uploaded_file( $arquivo_tmp, $destino  );

O exemplo acima funciona corretamente, mais recebe um zero em questão de segurança. Sabe porque? Ele simplesmente salva todos os arquivos que foi enviado por upload para o servidor. Se eu selecionar um arquivo .php e envia-lo ele poderá ser executado sem nenhum problema pelo servidor.

Então vamos refazer este exemplo com mais segurança

<?php
/******
 * Upload de imagens
 ******/

// verifica se foi enviado um arquivo 
if ( isset( $_FILES[ 'arquivo' ][ 'name' ] ) && $_FILES[ 'arquivo' ][ 'error' ] == 0 ) {
    echo 'Você enviou o arquivo: <strong>' . $_FILES[ 'arquivo' ][ 'name' ] . '</strong><br />';
    echo 'Este arquivo é do tipo: <strong > ' . $_FILES[ 'arquivo' ][ 'type' ] . ' </strong ><br />';
    echo 'Temporáriamente foi salvo em: <strong>' . $_FILES[ 'arquivo' ][ 'tmp_name' ] . '</strong><br />';
    echo 'Seu tamanho é: <strong>' . $_FILES[ 'arquivo' ][ 'size' ] . '</strong> Bytes<br /><br />';

    $arquivo_tmp = $_FILES[ 'arquivo' ][ 'tmp_name' ];
    $nome = $_FILES[ 'arquivo' ][ 'name' ];

    // Pega a extensão
    $extensao = pathinfo ( $nome, PATHINFO_EXTENSION );

    // Converte a extensão para minúsculo
    $extensao = strtolower ( $extensao );

    // Somente imagens, .jpg;.jpeg;.gif;.png
    // Aqui eu enfileiro as extensões permitidas e separo por ';'
    // Isso serve apenas para eu poder pesquisar dentro desta String
    if ( strstr ( '.jpg;.jpeg;.gif;.png', $extensao ) ) {
        // Cria um nome único para esta imagem
        // Evita que duplique as imagens no servidor.
        // Evita nomes com acentos, espaços e caracteres não alfanuméricos
        $novoNome = uniqid ( time () ) . '.' . $extensao;

        // Concatena a pasta com o nome
        $destino = 'imagens / ' . $novoNome;

        // tenta mover o arquivo para o destino
        if ( @move_uploaded_file ( $arquivo_tmp, $destino ) ) {
            echo 'Arquivo salvo com sucesso em : <strong>' . $destino . '</strong><br />';
            echo ' < img src = "' . $destino . '" />';
        }
        else
            echo 'Erro ao salvar o arquivo. Aparentemente você não tem permissão de escrita.<br />';
    }
    else
        echo 'Você poderá enviar apenas arquivos "*.jpg;*.jpeg;*.gif;*.png"<br />';
}
else
    echo 'Você não enviou nenhum arquivo!';

Veja este exemplo funcionando em /code/10031/form.html

Baixe os exemplos deste POST aqui.

Possui dúvidas? Escreva nos comentários.

Gostou? Não esqueça de curtir!

138 comentários

Deixe uma resposta

  1. Como é feito no caso de criar um site do tipo venda de carros, onde o usuário cadastrado iria cadastrar seus dados e ele mesmo insere as fotos no site, minha duvida é se ele enviar uma foto pequena ou muito grande, ela ira ficar destorcida, tipo mais esticada como é feito esse código para padronizar as fotos

     
  2. Sempre redimensione as imagens de todos os uploads que foram enviados.

    https://php.eduardokraus.com/redimensionando-imagens-com-php

     
  3. Muito bom mesmo....

    Obrigado!

     
  4. Muito bom esse tutorial! Tentei vários e esse foi o único que me ajudou de verdade! Mesclou facilidade e segurança.

     
  5. Valeu mesmo, me ajudou muito!

     
  6. Meu caro esse código está funcionando tudo certinho, minha dúvida é saber como faço para usar o primeiro código em PHP a parte que recebe os dados. Quando minha página fica em HTML ela funciona, más quando fica em PHP ela não funciona gostaria de saber o pq está acontecendo isso e se podem me ajudar.

     
  7. Qual erro que aparece nos LOGS do apache?

     
  8. Então Eduardo, obrigado por tentar ajudar, é o seguinte, não seria um erro que o apache irá mostrar meu erro é pq eu tenho minha páginas e todas são em PHP e ai eu quero enviar uma imagem para outra página PHP, porém essa imagem não está sendo transportada para outra página, quando a requisição vai na outra página fala que está sem nenhum arquivo, porém quando a página de upload está em HTML ela funciona normalmente, esse é meu problema no transporta do arquivo.

     
  9. Esse Script de upload que você fez ele bloqueia tempdata se não, não adianta nada entre em contato no e-mail emerson.oliveirabr@hotmail.com

     
  10. funciona perfeitamente, mas precisei concatenar um ponto antes $extensao "$novoNome = uniqid ( time () ) . '.'.$extensao;"

     
  11. Obrigado. Corrigi o exemplo.

     
  12. Porque nao funciona no celular?

     
  13. Aqui esta funcionando no Celular.

     
  14. boa tarde galera, estou com um problema daqueles. cheguei agora na empresa, algumas semanas, não tenho muita experiencia primeiro emprego. chegando aqui me deparei com um sistema bem antigo na desenvolvido, porem desenvolvedor saiu da empresa, o sistema estava parado, mais agora querem por em uso, e tem vários pequenos problemas, muitos dele consegui resolver mais um em especifico esta difícil.

    quero pedir a ajuda de vocês. o sistema ao cadastrar alguém faz upload de imagem, porem o botão de selecionar funciona e a imagem fica salva com outro nome do banco de dados, conclusão não aparece no perfil pessoal.se eu mudar o nome da imagem para igual ao do servidor no banco de dados, ela aparece.

    // função
    https://pastebin.com/E2geebuC

     
  15. Vi um monte de POG, uso da função mysql_query que foi descontinuada a muito tempo, nenhuma validação anti sql-injection e muito mais problemas...

     
  16. Olá novamente Eduardo.
    Eu preciso que, ao fazer o upload da imagem, o arquivo seja salvo com um nome a ser especificado em uma caixa de texto na própria página. Como poderia integra isso nesse exemplo?

     
  17. Olá.
    Meu código está dando o seguinte erro ao clicar em salvar:

    Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

    Fatal error: Unknown: Failed opening required 'C:/xampp/htdocs/Exemplos/Formulário de upload de imagens/recebeUpload.php' (include_path='C:\xampp\php\PEAR') in Unknown on line 0

     
  18. Um erro "grave" que vejo de início (além de usar windows) é o fato de usar espaços e acentos na nomenclatura de pastas. Jamais use espaços ou caracteres especiais em nomes de arquivos ou pastas.

     
  19. Resolvi a questão do nome das pastas (o windows não rola no momento, e não por falta de tentativas), e agora me dá o seguinte erro:

    Notice: Undefined index: arquivo in C:\xampp\htdocs\Exemplos\upload_imagem\recebeUpload.php on line 2

    Notice: Undefined index: arquivo in C:\xampp\htdocs\Exemplos\upload_imagem\recebeUpload.php on line 3

     
  20. Já resolvi o problema. Obrigado pela atenção.

     
  21. OLA ,EU GOSTARIA DE SABER QUANTO VOCE COBRA PARA FAZER UM ENVIO DE IMAGENS NO MEU SITE , E TAMBEM UM BANCO DE CONSULTA DE DADOS  INTERNO ONDE O CLIENTE  PODE CONSULTAR  UM DOCUMENTO EMITIDO PELO NOME OU NUMERO.

    AGRADEÇO.

     
  22. Boa tarde,

    Me envia um e-mail que conversamos,

    junior_wash@hotmail.com

     
  23. Eduardo tudo bem. Como faria pra reduzir o peso da imagem, pois da maneira que esse script funciona a imagem é carregada com seu peso total. Obrigado.

     
  24. Olá estou com dificuldades de inserir a imagem no banco de dados, tenho até 5 imagens que podem ser inseridas, o diretório é criado a imagem sobe no sistema fora da pasta 'documentos' que mandei criar mas sobe só que no banco de dados não é inserida, como faço precisava de uma ajuda.

    Obrigado

    Abaixo esta o metodo onde estou aplicando (melhor, acho que devo aplicar neste metodo) o combo pra fazer a inserção junto com os outros dados das outras tabelas, é um formulario fale conosco.

    public function adicionar(){
                    
                    if(!is_dir('control/img/inh/insoft/'.$_SESSION[$_SESSION['visao'].'_ioc_id'].'')){
                        mkdir('control/img/inh/insoft/'.$_SESSION[$_SESSION['visao'].'_ioc_id'].'/');
                        mkdir('control/img/inh/insoft/'.$_SESSION[$_SESSION['visao'].'_ioc_id'].'/documentos/');
                    }

                    if(isset($_FILES['iim_imagem']['name'])){

                        $obj_imagem = new daoImagem();
                        $arquivo_tmp = $_FILES['iim_imagem']['tmp_name'];
                        $nome        = $_FILES['iim_imagem']['name'];
                        $extensao    = pathinfo ($nome, PATHINFO_EXTENSION);
                        $extensao    = strtolower ($extensao);
                        $novoNome    = uniqid (time()) .".". $extensao;
                        $destino     = 'control/img/inh/insoft/documentos'.$_SESSION[$_SESSION['visao'].'_ioc_id'].'/' . $novoNome;

                        $_REQUEST['iim_imagem'] =  $novoNome;
                        $this->obj_imagem->Inserir();
                        if (move_uploaded_file($arquivo_tmp, $destino)) {
                            echo json_encode(array("resultado"=>"sucesso","novaimagem"=>self::$url."control/img/inh/insoft/".$_SESSION[$_SESSION['visao'].'_ioc_id']."/".$novoNome));
                        }else{
                            echo json_encode(array("resultado"=>"erro"));
                        }

                    }else{
                        echo json_encode(array("resultado"=>"erro","motivo"=>"imagem não informada"));
                    }      
                    
                    
                    if(isset($_POST['ict_nome']) && isset($_POST['ict_cpf']) && isset($_POST['ict_telefone']) && isset($_POST['ict_nascimento']) && isset($_POST['ict_email'])){
                        if(!empty($_POST['ict_nome']) && !empty($_POST['ict_cpf']) && isset($_POST['ict_telefone']) && isset($_POST['ict_nascimento']) && isset($_POST['ict_email'])){
                            $obj_clt     = new daoCliente();
                            $clt         = $obj_clt->Where("  ict_cpf = '".$_POST["ict_cpf"]."'  ")->Consultar();
                            if(count($clt) == 0){
                                $resposta  = array("resultado"=>"sucesso");
                                $_REQUEST['ict_codigo'] = $this->obj_cliente->geraCodigo();
                                    daoCliente::$ajax = 'T';
                                    $resultado = $this->obj_cliente->Inserir();
                                    if(!$resultado){
                                        $resposta  = array("resultado"=>"erro","motivo"=>"Ocorreu um erro no processamento");
                                    }
                            }else{
                                 $_REQUEST['ict_codigo'] = $clt[0]['ict_codigo'];
                            }
                        }
                    }
                    
                    
                    if(isset($_POST['ioc_questionamento'])){        
                        if(!empty($_POST['ioc_questionamento'])){
                            
                            $obj_entoc = new entOcorrencia();
                            
                            $_REQUEST['ioc_codigo']     = $this->obj_ocorrencia->geraCodigo();
                                $obj_entoc->setCodigo($_POST['ioc_codigo']);
                                $obj_entoc->setDataIni($_POST['ioc_data_ini']);
                                $_REQUEST['ioc_ict_codigo'] = $_REQUEST['ict_codigo'];
                                $obj_entoc->setIctCodigo($_REQUEST['ioc_ict_codigo']);
                                $resposta  = array("resultado"=>"sucesso");
                                daoOcorrencia::$ajax = 'T';
                                $resultado = $this->obj_ocorrencia->Inserir();
                                
                                if(!$resultado){
                                    $resposta  = array("resultado"=>"erro","motivo"=>"Ocorreu um erro no processamento");
                                }
                          
                        }
                    }
                    
                    echo json_encode($resposta);
                }

    Agradeço qualquer ajuda!!!

     
  25. Boa noite tenho essa tabela de media mas o cliente só quer que o usuário carregue 12 fots será que se eu alterar o valor id int(12)consigo?
    Me ajude porfavor


    Table structure for table `media`
    --

    CREATE TABLE IF NOT EXISTS `media` (
      `id` int(255) NOT NULL AUTO_INCREMENT,
      `active` int(1) NOT NULL DEFAULT '0',
      `album_id` int(255) NOT NULL DEFAULT '0',
      `descr` text COLLATE utf8_unicode_ci NOT NULL,
      `extension` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none',
      `name` text COLLATE utf8_unicode_ci NOT NULL,
      `post_id` int(255) NOT NULL,
      `temp` int(1) NOT NULL DEFAULT '1',
      `timeline_id` int(255) NOT NULL,
      `type` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none',
      `url` text COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

     
  26. ta dizendo direto que não tenho permissão  Aparentemente você não tem permissão de escrita.
    mesmo eu tendo dado permissão

     
  27. Boa Noite Eduardo, aonde eu configuro para colocar em uma pasta específica?

     
  28. Olá Raquel

    No move_uploaded_file.

     
  29. Amigo, preciso deste script e também fazer com que ele receba apenas 1 tamanho de imagem pré definido e na importação, o usuário digitar alguns campos de controle e tudo deverá estar no mysql...É difícil?

     
  30. Boa noite Eduardo, você tem um tutorial para enviar varias fotos, se você tiver ou pode fazer pra gente um tutorial que a Pessoa que tiver permissão entre no site, crie um Álbum com algum nome, exemplo Natal e coloca as fotos naquela Álbum, e se quiser acrescentar mais ao mesmo Álbum também poderia ou criar um novo Álbum. Parabéns pelo tutorial, ficou excelente!

     
  31. Estou com o seguinte erro:

    [códigos removidos]

    Poderia me ajudar ?

     
  32. Posta códigos no github, e posta o link aqui apenas.

     
  33. Fala Eduardo legal sua iniciativa, gostaria somente de avisar ao pessoal que aspas duplas dentro de outra aspa dupla nao pode, por isso o erro, então deve-se colocar aspas simples dentro das aspas duplas na linha 36 e 42.

     
  34. Meu sistema removia as barras em frente a aspa. Atualizei os códigos

     
  35. Eduardo, muito obrigado! Você não faz ideia do quanto sua dica me ajudou. Deus te abençoe amigo.

     
  36. Legal me ajudou muito!

     
  37. Parabéns pelo tuto!

     
  38. Meu sistema esta passando reto por esse comando:
    if(isset($_FILES['arquivo']['name']) && $_FILES["arquivo"]["error"] == 0)
    Você tem alguma ideia do porque? Agradeço desde já.

     
  39. Como faço para ter esse mesmo cadastro da imagem porém no Mysql também?

     
  40. Só salvar o caminho.

     
  41. Boa noite amigo não entendo nada desse código porém estou precisando desse codigo para que os clientes enviem fotos para
    meu site de camisetas não tenho a minima idéia de onde colocar
    dentro do código o lugar onde fica o site para ser enviado as fotos
    você poderia me ajudar ?

    Obrigado!

     
  42. Então, eu recomendo que contrate um programador.

     
  43. Cará esta dando este erro

    Erro ao salvar o arquivo. Aparentemente você não tem permissão de escrita.

    com faço esta permissão de escrita?

    obrigado!

     
  44. como fazer o upload de multiplas imagens com o código acima

     
  45. Amigo, Tenho uma tabela com um campo Blod e consegui fazer ele salvar mas não estou conseguindo fazer ele mostrar. Ele traz uma figura de erro e não mostra a imagem.

     
  46. Olá, tenho um problema. Quando utilizo meu site que esta em php para fazer upload em arquivos do excel, só funciona em local. mas quando mando para hospedagem ele nao aceita o upload. o erro que é apresentado é o erro criado por mim  para arquivos que não são aceitos. Já tentei a hospedagem da godaddy e do terra.

    Agradeço a ajuda

     
  47. É bem provável que você esqueceu de definir as permissões de escrita na pasta que será salvo o upload

     
  48. Obrigado! Tinha esquecido deste detalhe. Agradeço a ajuda!

    Sucesso!!!

     
  49. Parabéns Eduardo Kraus,
    Pela boa didática e bom post.

    Como eu poderei saber qual é a pasta para eu apontar os arquivos upload em meu código PHP?
    ? É no meu servidor de hopedagem? Ex.: http://meuservidor.com.br/file-uploads
    ? Ou o 'caminho'é no meu próprio site? Ex.: http://meudominio.com.br/file-uploads

     
  50. O caminho é o é o seu próprio site

     
  51. Boa noite, na minha aplicação adicionar a imagem é opcional, porém quando não adiciono da erro,o que eu poderia fazer para modificar isso?

     
  52. bom dia... funcionou de primeira.. estava atrás de um código que fizesse isto..sem BD... porém teria como acrescentar o redimencionamento das imagens antes de serem gravadas na pasta?  

     
  53. Ola estou tentando juntar os seus códigos de upload e o de redimensionamento em php, mas não consigo entender o que fiz de errado, vc poderia dar uma olhada no código https://github.com/luispedro75/Upload-e-Redimensionamento/blob/master/recebeUpload.php, muito obrigado desde ja (sou iniciante em php e não manjo de php gd).

     
  54. Você tem HTML misturado com o OUTPUT da Imagem.

     
  55. Obrigado pela ajuda, seria melhor tirar o html do arquivo? e adaptar a parte de Upload. Ou fazer o output ter algum comando html, tipo     echo "<img src=\"" . $nova_imagem . "\" />"; mas não consegui que  a imagem aparecer no browser. Outra duvida, o arquivo de redimensionamento é php puro mas não tem ?> no final, ta tudo bem? Obrigado desde ja.

     
  56. Muito bom!

    Achei seu artigo pois estou buscando uma forma de fazer o upload por meio de URL, tentei adaptar seu arquivo alterando o $_FILES por $GET mas não consegui. se conseguir me ajudar a adaptar ficaria feliz.

     
  57. Você não conseguirá fazer upload via $_GET. Cada coisa em seu lugar e $_FILES esta para upload.

     
  58. Muito bom porém aqui só funcionou fazer o upload de jpg.

     
  59. Mel exemplo funciona com JPG, JPEG, PNG e GIF

     
  60. Ótimo tutorial, só me deixou uma duvida. Eu consigo definir um tamanho de imagem padrão, por exemplo 300X300. Mesmo que o user coloque uma imagem maior, permite que ele escolha esse "quadrado" que sera a foto (Exemplo: O aplicativo instagram que necessita ser uma foto quadrada, pelo contrario ele corta automaticamente a imagem). Como faço isso ?

     
  61. Eduardo: Como faço para que sempre a senha seja "pedida" ? Coloquei 'require' mas não obtive sucesso. Obrigado.

     
  62. Não é require, e sim required. Exemplo: <input type="text" required>

     
  63. Se você não estiver adicionando o DOCTYPE do HTML5 ele não irá reconhecer este atributo.

     
  64. E a regra principal de segurança é: Nunca confie no usuário. Todos os dados enviados devem ser filtrados e tratados antes de processados.

     
  65. Obrigado por tudo. Parabéns pelo site.

     
  66. Boa noite, como posso fazer para buscar uma imagem salva na pasta através de uma referencia no banco de dados, por Ex. Cpf.

    Abs.

     
  67. Depende como você salva esta imagem.

     
  68. Salva em uma pasta no servidor, trazer esta foto para tela buscando no banco de dados.

     
  69. Só salvar o caminho que salvou o arquivo e busca-lo...

     
  70. Obrigado. ja conseguir resolver.

     
  71. Excelente tutorial, eu adaptei algumas coisas e esta funcionando para o que eu precisava, porém, agora tenho outra dúvida, por exemplo, tenho uma pag para cadastro de noticias, no bd ela vai ter um id, titulo e descricao, eu gostaria de mostrar a foto referente a esta noticia. No caso cada noticia cadastrada teria uma foto especifica, como eu faria algo assim?

     
  72. Neste caso você tem que ter uma coluna a mais no DB para salvar o caminho da imagem.

     
  73. Consegui arrumar usando a função glob, e ai nao preciso salvar o caminho no banco, eu salvo a imagem na pasta com o id da noticia. Deu certo =)


    Ficou assim

    <?php
        $imagem = glob("images/$id_noticia.jpg");
            if($imagem){?>
               <img src="<?php  echo $imagem[0] ?>" >                                
                                      <?php  
                                      }
                                      ?>

     
  74. Não use o GLOB. Use o FILE_EXISTS, use aspas simples e concatene as strings.

    $imagem = 'images/' . $id_noticia . '.jpg';
    if( file_exists( $imagem ) )
        echo '<img src="' . $imagem . '" />

    Leia mais em http://php.eduardokraus.com/melhorar-desempenho-do-php para ver o porque de não usar aspas duplas.

     
  75. Voce esta de parabens pela clareza em sua didatica, provavelmente voce deva ser um professor.  Estou estudando criação de site dinamico com envio de imagens. o nivel de explicação que encontrei em sua postagem é dez, não encontrei em muitos videos do youtube. Obrigado em compartilhar conosco esse rico tutorial.  

    Jefferson Carlos

     
  76. Obrigado pelas palavras. Sim, sou professor.

     
  77. Professor, obrigado em responder-me. Sou tecnico em informatica e eletriicista predial, procuro sempre reciclar-me. Estou estudando desenvolvimento web, por perceber que hardware apenas esta deixando de ser primordial. Faco muita coisa em access e vba, mas quero levar tudo para web. Fiquei admirado com o dreamwavwe, uso para criacao de paginas dinamicas, ainda nao achei nenhum software livre que seje igual a ele. Com ele desenvolvo um sistema completo. Gostaria de saber, se para criar sistema de uploard de imagem ou arquivo tem que ser somente pela linha de codigos ou o dreamwever possui ferramentas que faz sistemas de uploard. Muito obrigado.
    Att,
    Jefferson carlos

     
  78. Dreamweaver é o maior lixo para desenvolvimento. Da uma lida em http://php.eduardokraus.com/qual-a-melhor-ide que tem IDE muito boa.

    Dreamweaver te limita de mais ao desenvolvimento, principalmente quando se fala de Orientação a Objeto que é fundamental no desenvolvimento.

     
  79. Muito obrigado, professor, vou baixa-lo e aprender usa-lo.

     
  80. ola queria saber se tem como enviar uma imagem com mensagem e mostrar no site ,como tem face  que a gente eescolhe uma fotoe e da para por mensagem e enviar  

     
  81. Olá Robson

    É possível sim. Você pode adicionar quantos campos INPUT e TEXTAREA forem necessários.

    <form method="post" enctype="multipart/form-data" action="recebeUpload.php">
       Selecione uma imagem: <input name="arquivo" type="file" />
       <br />
       <input name="comentario" type="text" />
       <br />
       <input type="submit" value="Salvar" />
    </form>

     
  82. tem como eu digitar a mensagem a mensagem e enviar par um site se possivel me passa todos os codigos e o banco de dados

     
  83. Sim, com o código que enviei antes, você envia junto uma descrição.

     
  84. Você ao falar de professora certamente esta fazendo curso de Programação.

    Se você não quer estudar esta na hora de você procurar outra área, pois na área de Programação nunca se para de estudar já que é uma área que nunca para de mudar e vir novos e novos caminhos.

     
  85. e que a professora pediu pra ter no site que fizemos upload de foto com mensagem para mandar para o próprio site mesmo queria saber como faz e quais os codigos

     
  86. Olá,
    tenho um formulário já pronto, que envia para um PHP que salva os dados no banco de dados.

    Adicionei e modifiquei  script acima, mas não deu certo,
    A parte da foto deixei acima do insert, e apontei para uma pasta no servidor.
    Mas não deu certo.
    e se puder me ajudar também o nome da foto recebe o nome da empresa, só que não consigo remover os acentos...

     
  87. É difícil saber o que causa o erro para salvar

    Sobre remover acentos faça assim:

    function retira_acentos($texto){
    return strtr($texto, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ", "aaaaeeiooouucAAAAEEIOOOUUC");
    }

    echo  retira_acentos("Teste de acentuação");

     
  88. O código está dando erro de permissão e eu uso SO Windows, então como soluciono o problema?

     
  89. Não trabalho com ruWindows a mais de 6 anos. Já testou em Linux?

     
  90. PRECISO DE AJUDA PARA CRIA UM BOTÃO QUE DIRECIONE A IMAGEM PARA O LOCAL DA FOTO NESTE FORMULÁRIO.
    CONTATO
    robson_santana@portserviceunisind.com.br

     
  91. Direcionar a imagem? Como assim? Direcionar para onde?

     
  92. Olá amigo, muito bom o post! Mas eu gostaria de saber se existe a possibilidade de enviar uma pasta com várias fotos através de um formulário com os endereços de cada foto separada no banco de dados. Isso é, vou criar álbuns de eventos e para ficar enviando foto por foto é muito demorado, então gostaria de pegar a pasta toda e deixar enviando (mas precisa ser através do formulário e não por ftp) e durante esse tempo, eu poderia fazer outra coisa. Desde já agradeço!!!

     
  93. Deve-se usar uma estrutura de repetição (while) e claro com um array (name="arquivo[]"...).
    Para isto deve ser realizada algumas adaptações no código do colega.

     
  94. Artigo e script um pouco antigos, mas me ajudou muito, era exatamente o que eu precisava, o script funciona perfeitamente, se alguém está com problemas tem de verificar as permissões da pasta e se a mesma existe. Ou edita o script e faz um if pra ver se a pasta existe, caso negativo faz um mkdir.

     
  95. Olá, gostei muito de seu script e gostaria de saber como que eu poderia exibir o arquivo que eu fiz o upload... ficaria grato se me mandasse um e-mail me ajudando com isso. Obrigado

     
  96. Pessoal, tive um problema para salvar as fotos na pasta.
    No inicio achei q fosse algum problema de permissão da pasta (diga de passagem, é um inferno p/ mudar a permissão de "Somente leitura" no Windows), porém após quebrar a cabeça por horas resolvi o problema mudando a seguinte linha:

    move_uploaded_file($_files['arquivo']['tmp_name'] , $_files['arquivo']['name'])

    percebam q alterei de 'tmp_name' para apenas 'name'.

    Dessa forma o envio funcionou corretamente.
    falow

     
  97. ...
    if(move_uploaded_file( $slide_tmp, $slide  )){
                $insere_slide = "INSERT INTO slide (nomeSlide) VALUES ('$novoNome')";
                mysql_query($insere_slide);
                ?>
                Arquivo salvo com sucesso em : <strong><?php echo $slide ?></strong><br />
                <img src="<?php echo $slide ?>"/>
    ...

     
  98. Fui enviar a foto para uma pasta dentro do meu ftp e recebi a seguinte mensagem: "Erro ao salvar o arquivo. Aparentemente você não tem permissão de escrita".

     
  99. Aparentemente você esqueceu de dar permissão de escrita na pasta que estas tentando salvar.

    Ou também esquecesse de criar a pasta.

     
  100. Estou com um pequeno problema.
    Eu alterei a variável para $destino = arquivos/' . $novoNome;  
    Criei uma pasta arquivos e dei permissão 777.
    Está pasta está no mesmo local dos arquivos do script.
    Mas o erro continua.
    Notei que no script aparece a pasta /tmp/ como destino.
    Poderia me ajudar?
    Obrigado

     
  101. Como posso fazer pra passar o caminho gerado para a imagem pra um banco de dados ?

     
  102. ...
    $dir = '../images/' . $novoNome;

    $insere = "INSERT INTO slide (dir) VALUES ('$dir')";
    mysql_query($insere_slide);
    ...

     
  103. Ops!

    digo:
    mysql_query($insere);

     
  104. Parabéns, excelente tutorial!

     
  105. gostaria de saber se como inserir 2 imagens ou mais almesmo tempo?

     
  106. Eduardo gostei muito dos teus posts e eu gostaria de tirar uma dúvida, tem como enviar arquivos nas extensões pdf e word pelo upload direto para o email sem que haja a necessidade de criar uma pasta no servidor?

    grato.

     
  107. "Erro ao salvar o arquivo. Aparentemente você não tem permissão de escrita."
    Não estou conseguindo arrumar este erro, pode ajudar ?

     
  108. Eduardo após o upload teria como enviar o arquivo diretamente para meu email? Agradeço desde já, para a pasta do servidor ocorreu tudo bem.

     
  109. Infelizmente da erro de permissão, qual a pasta alterar? Obrigado!

     
  110. Você deve definir a permissão para a pasta que você definiu no move_uploaded_file

    Ex: move_uploaded_file($_FILES["arquivo"]["tmp_name"], '/local/seila/imagem.png');

    A pasta /local/seila necessíta permissão de escrita.

     
  111. sou iniciante em php. gostaria que depois que imagem fosse carregada, ela fosse enviada como anexo para um email definido. alguém poderia me ajudar?

     
  112. cara muito bom o seu tutorial, eu estava fazendo o meu mas não estava muito bem estruturado, mas como já intendo esse código aproveitei o seu ai pra min agilizar os processos..

    muito simples e bem comentado gostei muito .. força amigo esse comentaria esta indo da Africa - Cabo verde.

     
  113. Obrigado pelo seu post amigo , deus te abençoe me ajudo muito

     
  114. ola eduardo! estou com uma duvida....
    tenho um script de "quiz" (questoes com respostas), porem gostaria de incluir este script para envio de imagens...
    pois alguma questoes que quero colocar tem imagens...
    este quiz tem um botao de enviar a questão....
    quando eu junto os dois scripts dá erro porque ficam os dois botoes de enviar: as fotos e o quiz....
    gostaria de deixar apenas um botao...
    mas que este funcionasse para as duas funçoes: enviar o quiz e enviar ao mesmo tempo a imagem...
    agradeço sua atençao

     
  115. Primeiro não aninhe FORM. só deve existir um único FORM.

    Exemplo errado.

    <form... >
    Bla bla bla
    <form... >
    <input type="file"....
    </form>
    bla bla bla
    </form>
    Maneira certa
    <form... >
    Bla bla bla
    <input type="file"....
    bla bla bla
    </form>

     
  116. onde se altera a permissao da pasta

     
  117. Olá, você poderia disponibilizar o código para listar as imagens? eu já tenho um... porém a listagem está em ordem alfabética, eu queria colocar os mais recentes no inicio... Poderia me ajudar? =)

     
  118. Só reordene usando a função sort do PHP.

     
  119. Cara, o exemplo até funciona mas da erro de permissão.. o qeu eu faço ???

     
  120. Altere a permissão da pasta que salva as imagens para 777

     
  121. Boa noite Eduardo,

    Gostaria de saber se tem jeito de adicionar um campo para que ao enviar a imagem, pro meu servidor também envia o nome da imagem pro meu banco de dados.

    gostei do seu upload de imagem caiu do céu.

    Abraço..

     
  122. <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Upload de arquivos</title>
    </head>
    
    <body>
    
        <form method="post" enctype="multipart/form-data" action="recebeUpload.php">
    
           Selecione uma imagem: <input name="arquivo" type="file" />
    
           <br />
    
           <input type="submit" value="Salvar" />
           aqui campo de texto para adicionar nome
           <input type="text" name="nome" />
        </form>
    </body>
    </html>
    Em PHP você recupera assim:
    <?php
    
    if(isset($_FILES['arquivo']['name']))
    {
        move_uploaded_file( $_FILES["arquivo"]["tmp_name"], $_FILES["arquivo"]["name"]);
        // Aqui esta o Nome
        echo $_POST['nome'];
    }
    

     
  123. Ola Wallace

    Você envia por E-mail como descrito neste POST http://php.eduardokraus.com/anexando-arquivos-no-e-mail

     
  124. Gostaria de saber se é possível ao invés de direcionar para uma pasta, direcionar os arquivos direto para mei e-mail, se for possível isso. como fazer?

     
  125. Eduardo, você tem alguma sugestão de boa prática se desejássemos salvar o arquivo direto em banco de dados?

     
  126. Eu não recomendo salvar em banco de dados. Não faço isso e por isso não tenho a menor idéia de como fazer isso com segurança.