Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Workshop de PHP
SEÇÕES
Manuais relacionados
+Workshop de PHP
Categorias
+PHP
+Scripts em PHP
+Gestão de arquivos por PHP

Índice do Manual Workshop de PHP
+ Gestão de ficheiros através de PHP
+ Upload de ficheiros com PHP
+ Verificar a existência de uma URL
+ Leitura sequencial de ficheiros com PHP
+ Escritura em ficheiros com PHP
+ Gestão de directórios com PHP
+ Função que escreve um campo select com valores de uma base de dados
+ Receber o último ID de uma inserção com PHP e MySQL
+ Recolher dados de um Select Multiple com PHP
+ Enviar e-mails pelo PHP
+ Validar um endereço email em PHP
+ Loop para receber todas as variáveis por POST em PHP
+ Enviar um formulário por mail com PHP
+ Paginação de resultados com PHP e MySQL
+ Usuários ativos com PHP
+ Listas de elementos com cores alternas em PHP
+ Programas de livre distribuição em PHP
+ phpMyAdmin
+ Formatação de uma cadeia
+ Cálculo dos dias de um mês em PHP
+ Contador simples para páginas PHP
+ Avaliações dos usuários em PHP
+ Rastrear os robôs de buscadores
+ Recomendar um site usando PHP
+ Criação de um log de erros
+ Comprimir página PHP
+ Contador PHP com imagens
+ Editor PHP Maguma Studio
+ SiteMaps de Google em PHP
+ Teste de velocidade de conexão à Internet
+ Mostrar Conteúdo de acordo com o país em PHP
+ Conteúdos em banco de dados com PHP
+ Problemas com as datas em timestamp Unix de PHP
+ Contar o número de linhas e caracteres em arquivo PHP
+ Transformação Doc, Odt ou Rtf para PDF
+ Preencher um arquivo RTF e gerar o PDF
+ Converter arquivos ods ou xls para pdf
+ PHP isam, ferramenta Web para Arquivos Planos
+ Undefined variable ou Undefined index
+ Agregar carinhas ao sistema
+ Paginator, script para paginação com PHP e MySQL
+ Executar scripts PHP automaticamente através do cron com CURL
+ Uso do FTP com PHP
+ Instalação de One or Zero PHP Helpdesk
+ Portal PHP Nuke
+ Gerando feed RSS de notícias em PHP
+ Blasten blt-SEARCH 1.0.5
+ Classes e Objetos em PHP
+ Recuperando a qualidade de uma imagem JPEG
+ Comprovar se existe o domínio do correio
+ Tutorial de BBCode
+ Função em PHP para o cálculo de minutos transcorridos em duas horas dadas
+ Criação de gráficos em PHP com JpGraph
+ Gerar documentos de Word RTF com PHP
+ Introdução ao Symfony
+ Arredondar decimais em PHP
+ Envio de boletins a e-mails de um banco de dados MySQL
+ Htaccess e páginas dinâmicas
+ Criando imagens com PHP
+ Programar um buscador com PHP e MySQL
+ Loop para receber todos os dados de uma fila de um recordset com PHP
+ Criação de BBcode em PHP
+ Incluir feeds em sua web em 5 passos
+ Calcular dias entre duas datas com PHP
+ Exemplo de conexão com banco de dados Access em PHP
+ Utilizar Curl para copiar uma imagem de uma web em nosso disco rígido
+ Controle da saída em PHP
+ Controle de saída em PHP II
+ Mostrar código PHP de um arquivo com cores ressaltadas

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


Upload de ficheiros com PHP

Realizamos umas páginas que recebem um ficheiro desde o disco rígido do visitante e o transferem ao servidor remoto.


Em PHP temos muitas funcionalidades desenvolvidas desde o principio e sem a necessidade de instalar nada no nosso servidor. É o caso de fazer upload de ficheiros a um servidor web através de HTTP e através de uma página com um formulário, onde se permite seleccionar o ficheiro que queremos carregar do nosso disco rígido.

O exemplo está bem documentado numa data de páginas para programadores, como por exemplo na página da própria tecnologia: http://www.php.net/manual/es/features.file-upload.php. Nós neste caso vamos tentar ir um pouco mais longe, realizando umas quantas comprovações ao sibir o ficheiro e combinando no mesmo formulário campos de tipo file e tipo text.

O formulário para fazer upload e seleccionar os ficheiros

É um formulário qualquer, mas tem uma serie de peculiaridades e campos file, que não costumamos utilizar habitualmente.

<form action="sobeficheiro.php" method="post" enctype="multipart/form-data">
   <b>Campo de tipo texto:</b>
   <br>
   <input type="text" name="cadeiatexto" size="20" maxlength="100">
   <input type="hidden" name="MAX_FILE_SIZE" value="100000">
   <br>
   <br>
   <b>Enviar um novo ficheiro: </b>
   <br>
   <input name="userfile" type="file">
   <br>
   <input type="submit" value="Enviar">
</form>


Para começar vemos que se colocou um atributo novo no formulário: enctype="multipart/form-data", necessário para subir no mesmo formulário dados e ficheiros.

Também temos o campo hidden MAX_FILE_SIZE, que serve para indicar o tamanho em bytes dos ficheiros a fazer upload. Este campo em alguns navegadores não funciona. Para além disso, é fácil saltar esta protecção, pelo que devemos comprovar nas próprias páginas PHP comprovar que o ficheiro tem o tamanho que desejamos.

Em último lugar, temos o campo tipo file, onde se seleccionará o ficheiro a subir. Também colocámos um campo de tipo text, para subir dados através de POST de tipo texto acompanhando aos dados binários do ficheiro.

Página que sobe os ficheiros

Esta página deve fazer as comprovações necessárias para saber se as características do ficheiro são as que desejamos e realizar a cópia do ficheiro num directório do servidor.

Para fazer as comprovações, PHP cría-nos uma serie de variáveis que podemos aceder com a informação do ficheiro enviado.

$HTTP_POST_FILES['userfile']['name']
O nome original do ficheiro na máquina cliente.

$HTTP_POST_FILES['userfile']['type']
O tipo mime do ficheiro (se o navegador o proporciona). Um exemplo poderia ser "image/gif".

$HTTP_POST_FILES['userfile']['size']
O tamanho em bytes do ficheiro recebido.

$HTTP_POST_FILES['userfile']['tmp_name']
O nome do ficheiro temporal que se utiliza para armazenar no servidor o ficheiro recebido.

<?
//tomo o valor de um elemento de tipo texto do formulário
$cadeiatexto = $_POST["cadeiatexto"];
echo "Escreveu no campo de texto: " . $cadeiatexto . "<br><br>";

//dados do ficheiro
$nome_ficheiro = $HTTP_POST_FILES['userfile']['name'];
$tipo_ficheiro = $HTTP_POST_FILES['userfile']['type'];
$tamanho_ficheiro = $HTTP_POST_FILES['userfile']['size'];
//vejo se as características do ficheiro são as desejadas
if (!((strpos($tipo_ficheiro, "gif") || strpos($tipo_ficheiro, "jpeg")) && ($tamanho_ficheiro < 100000))) {
   echo "A extensão ou o tamanho dos ficheiros não é correcta. <br><br><table><tr><td><li>Permitem-se ficheiros .gif ou .jpg<br><li>Permitem-se ficheiros de 100 Kb máximo.</td></tr></table>";
}else{
   if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_archivo)){
      echo "O ficheiro foi carregado correctamente.";
   }else{
      echo "Erro ao subir o ficheiro. Não se pode guardar o ficheiro.";
   }
}
?>


Para começar, recolhemos o campo de texto enviado por POST, da forma habitual. Ainda que isto não tenha nada a ver com subir ficheiros, é normal que no mesmo formulário desejemos misturar vários tipos de informação.

A seguir, obtêm-se os dados necessários do ficheiro, tal como o seu nome, extensão e tamanho para, no seguinte if, verificar que a extensão seja .gig ou .jpg e que o tamanho é menor que 100000 bytes.

Se o ficheiro tinha as características desejadas, pode-se subir ao servidor. Para isso utiliza-se a função move_uploaded_file(), que recebe o nome do ficheiro temporal que se deseja subir e o nome de ficheiro que se lhe deseja dar.

Quando se faz upload do ficheiro, o servidor copia-o num path temporal para que sejamos nós os que escolhamos a posição definitiva onde queremos que se armazene. Se não o copiamos a nenhum sitio, depois da execução da página, apagar-se-á da sua localização temporal.

A função move_uploaded_file() utiliza-se para mover o ficheiro à posição definitiva. Recebe por um lado o nome temporal do ficheiro e por outro o nome que desejamos dar-lhe definitivamente e, se assim o desejarmos, o path para chegar ao directório onde queremos guarda-lo. No caso do exemplo só se indica o nome do ficheiro, por isso o ficheiro subirá-se ao mesmo directório onde estão as páginas PHP que fazem o upload. Esta função retorna um boleano que indica se houve ou não êxito ao subir o ficheiro.

Nota: É importante assinalar que o upload de ficheiros é um processo crítico que pode dar lugar a erros e buracos de segurança. Por exemplo, se os directórios destino estão protegidos contra escritura, obteremos um erro. Podemos ver os erros mais comuns relatados na página de PHP.

Recomendamos mais uma vez ampliar esta informação na página de PHP: http://www.php.net/manual/es/features.file-upload.php

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Workshop de PHP

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em PHP
+ Entrar em Scripts em PHP
+ Entrar em Gestão de arquivos por PHP


Comentário sem rever
Entre os comentários não revistos podem ter alguns interessantes que tenham sido enviado recentemente.
 Foram econtrados 3 comentários sem rever

VerVer os comentários não revistos



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites