segunda-feira, 24 de maio de 2010

[PHP] Gerenciamento e Upload de Arquivos

A maioria dos programadores que estão iniciando em alguma linguagem, seja ela de qualquer plataforma, em sua trajetória se depara sempre com alguma dificuldade. E neste artigo, venho relatar e explicar à vocês uma das minhas principais dificuldades quando estava no início da carreira de programador.

Sabemos que qualquer sistema web hoje em dia possui uma função bem importante com o nome de upload, seja ele de arquivos, músicas, fotos e etc. A uns 2 anos atrás tive uma dor de cabeça para aprender, mas hoje venho mostrar à vocês que isso não é um monstro como alguns dizem.


Upload de Arquivos em PHP

Primeiramente, para você realizar o upload de um arquivo, você terá que possuir um formulário preparado para receber um campo com a função de realizar o upload de arquivos. Abaixo mostro um exemplo de um formulário pronto para realizar upload, que chamaremos de form.php.

action=”valida.php” method=”post” enctype=”multipart/form-data”>
Arquivo: type=”file” name=”arquivo” id=”arquivo” />
ENVIAR

Atributos do Formulário:

-> action: Página de destino onde receberá o arquivo upado;
-> method: Tipo de método para envio das informações para o formulário. Tipos: Post e Get;
-> enctype=’multipart/form-data’: Este é o principal atributo que eu irei comentar, é ele que permite ao formulário realizar o upload de arquivos, sem esse atributo, mesmo contendo o campo input do tipo ‘file’, o upload não irá funcionar;

Atributos do Input

-> type=’file’: Atributo que permite ao input realizar upload de arquivos;

Agora já temos o formulário que irá realizar o upload de arquivos para a página valida.php
Variável Global $_FILES

Ao realizar o disparo do upload do arquivo para a página de destino, toda manipulação das informações desse arquivo serão manipuladas pela variável SuperGlobal $_FILES.
No formulário temos o campo ‘arquivo’, então nossa variável global $_FILES em seu primeiro parâmetro recebrá ‘arquivo’, pois o nome do campo input no formulário é ‘arquivo’.

Exemplo:
$_FILES['arquivo'] e consequentemente o parâmetro seguinte dependerá do que iremos manipular na variável.

Abaixo irei mostrar a aplicação dessa variável e seus principais atributos:

$_FILES["nome_do_arquivo"]["name"] – Retorna o nome do arquivo na máquina do usuário.
$_FILES["nome_do_arquivo"]["tmp_name"] – Retorna o nome temporário do arquivo armazenado no servidor.
$_FILES["nome_do_arquivo"]["size"] – Retorna o tamanho do arquivo em BYTES.
$_FILES["nome_do_arquivo"]["type"] – Retorna o tipo do arquivo.
$_FILES["nome_do_arquivo"]["errors"] – Retorna o código de erro associado a esse arquivo.

Com essas informações em mãos já podemos realizar diversos testes de validação e verificação para que nosso upload seja realizado com sucesso.

Para exibir as informações do arquivo passado para a página valida.php , coloque o seguinte código:


print_r($_FILES['arquivo']);
?>

Envie diversos arquivos da página form.php e veja a mudança na impressões das informações do arquivo irão mudar.
Verificar upload do arquivo ocorreu com sucesso:

Quando receber um arquivo que foi upado de alguma outra página devemos fazer diversos testes de segurança para manter a integridade de nosso sistema. E nosso primeiro teste será verificar se o arquivo teve um upload com sucesso. Para isso usamos a função is_uploaded_file().

Exemplo:


if (is_uploaded_file($_FILES["arquivo"]["tmp_name"])) {
print_r($_FILES["arquivo"]);
}
else {
echo “Erro”;
}
?>

Movendo um arquivo que foi upado:

Quando realizando o upload de um arquivo, o mesmo é movido para um diretório temporário (definino no PHP.INI). Para resgatar esse caminho temporário utilizamos a função $_FILES['arquivo']['tmp_name']. É preciso depois de realizar as principais verificações de segurança mover o arquivo para uma pasta de destino dentro do sistema e para isso utilizamos a função move_uploaded_file(), a qual recebe dois parâmetros o caminho de origem(neste caso o arquivo temporário) e o destino(pasta interna do sistema que receberá o arquivo upado).

Exemplo:

if (is_uploaded_file($_FILES["arquivo"]["tmp_name"])) {
if (move_uploaded_file($_FILES["arquivo"]["tmp_name"], “repositorio/user/”.$_FILES["arquivo"]["name"])) {
echo “Arquivo movido com sucesso”;
}
else {
echo “Não foi possível mover o arquivo”;
}
}
else {
echo “Erro”;
}
?>

Sistema de Upload Simples

Abaixo irei mostrar um exemplo que receberá arquivos upados de no máximo 2MB e só poderão ser upados imagens, caso contrário irá aprensentar mensagens de erro.
Veja como ficará o código:

if(is_uploaded_file($_FILES['arquivo']['tmp_name'])){
//AO ENTRAR NESTE BLOCO O ARQUIVO JÁ FOI UPADO COM SUCESSO.
if($_FILES["arquivo"]["size"] > 2100000){
//AO ENTRAR NESTE BLOCO O ARQUIVO JÁ POSSUI UM TAMANHO PERMITIDO PELO SISTEMA
if (!($_FILES["arquivo"]["type"] == “image/gif” || $_FILES["arquivo"]["type"] == “image/pjpeg” || $_FILES["arquivo"]["type"] == “image/jpeg” || $_FILES["arquivo"]["type"] == “image/png”)){
//AO ENTRAR NESTE BLOCO, O FORMATO DO ARQUIVO JÁ FOI AUTORIZADO PELO SISTEMA
if (move_uploaded_file($_FILES["arquivo"]["tmp_name"], “../repositorio/user/”.$_FILES["arquivo"]["name"])) {
echo “Arquivo enviado com sucesso.”;
}else {
echo “Erro ao enviar arquivo.”;
}
}else{
echo “ERRO. SOMENTE IMAGENS SÃO PERMITIDAS”;
}
}else{
echo “ARQUIVO EXCEDEU O LIMITE DE TAMANHO.”;
}
}else{
echo “ERRO DE UPLOAD DO ARQUIVO.”;
}
?>

E com isso finalizamos nosso sistema de upload de arquivos simples.
Espero que tenham gostado.
Boa sorte à todos.

Um forte abraço…

por: Pablo Garrido

em: Guia do PHP

Nenhum comentário:

O Curso

O Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas das Faculdades Integradas Simonsen - FIS, é um curso presencial, reconhecido pela Portaria 1.003 de 12.07.1993 (D.O.U. 13.07.1993), com carga horária mínima de 2.334 horas, que poderão ser cumpridas em no mínimo 03 anos (06 semestres letivos) e foi recentemente aditado pela Portaria nº 281, 29 de setembro de 2009, publicada no D.O.U nº 188, de 01 de outubro de 2009, Seção 1, página 19.
Os graduados nos Cursos Superiores de Tecnologia denominam-se tecnólogos, são profissionais de nível superior com formação para a produção, inovação científico-tecnológica e para a gestão de processos de produção de bens e serviços.

Faculdades Integradas Simonsen