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