Criando um contador de downloads com PHP e MySQL

Este artigo descreve como criar um contador de downloads em PHP, que armazena o número de downloads de um arquivo do seu site numa tabela do banco de dados MySQL.

[ Hits: 62.976 ]

Por: Fábio Berbert de Paula em 04/11/2002 | Blog: https://fabio.automatizando.dev


Elaborando o script - parte final



Viram só, um contador de download não é nenhum bicho de sete cabeças. Vamos juntar nossas partes do programa e mostrar a versão final do script:

<?
chdir('./publico'); // entrar no diretório público

if (!is_file($arquivo)) { // se o arquivo não é arquivo ...
echo "Erro: arquivo $file não encontrado !";
exit; // ... aborte o programa
}

$con = mysql_connect('localhost','phpdown','uaubaby');
mysql_select_db('phpdownload');

$consulta = "SELECT arquivo,hits FROM contador WHERE arquivo='$arquivo'";
$res = mysql_query($consulta,$con);
/*
certificar se o arquivo já foi clicado alguma vez. Se o arquivo ainda
não consta em nossa tabela, vamos inserir um novo registro, caso contrário
vamos somar um hit ao registro existente
*/

if ($saida = mysql_fetch_array($res)) { // registro existe
$hit = ++$saida[1]; // some 1 (um) ao número de cliques
$update = "UPDATE contador SET hits=$hit WHERE arquivo='$arquivo'";
mysql_query($update,$con); // atualize o registro
} else {
$insert = "INSERT INTO contador (arquivo) VALUES ('$arquivo')";
mysql_query($insert,$con); // insira o novo arquivo na tabela. O valor padrão
// de hit é 1 (um)
}
$tamanho = filesize($arquivo); // pega o tamanho do arquivo em bytes

// enviar os cabeçalhos HTTP para o browser
header("Content-Type: application/save");
header("Content-Length: $tamanho");
header("Content-Disposition: attachment; filename=$arquivo");
header("Content-Transfer-Encoding: binary");

// abrir e enviar o arquivo
$fp = fopen("$arquivo", "r");
fpassthru($fp);
fclose($fp);
?>
Para usar o mesmo, sempre que for criar um link para download, copie o arquivo para o diretório ./publico e defina a referência para./download.php?arquivo=nome_do_arquivo:

Clique aqui

Conclusão: uau, isso é mais divertido que tomar sorvete no shopping !

Atenciosamente,
Fábio Berbert de Paula
fabio@vivaolinux.com.br

Página anterior    

Páginas do artigo
   1. Introdução
   2. Criação do banco de dados
   3. Elaborando o script - parte 1
   4. Elaborando o script - parte 2
   5. Elaborando o script - parte 3
   6. Elaborando o script - parte final
Outros artigos deste autor

Organizando projetos com a classe FastTemplate (parte 2)

O Linux e o Star Office

SQL Dicas & Truques (parte 2)

FISL 10: Venturas e desventuras da turma do VOL

Diversão e Entretenimento no Linux

Leitura recomendada

PDO - Introdução e conceitos

Configurando Apache + MySQL + Manipulação de dados com PHP

Provendo dados em um servidor PostgreSQL através do Apache e PHP

Oracle 9i, Apache e PHP

PHP com PostgreSQL - Estruturando a conexão

  
Comentários
[1] Comentário enviado por gustavo_marcon em 22/03/2003 - 12:29h

muito interessante este script. valeu!

[2] Comentário enviado por rjardim em 11/07/2004 - 16:34h

bom, seu que minha pergunta nao vai ter uma resposta muito fácil, mas vai assim mesmo:

eu quero usar o script acima, mas o meu banco de dados tem um campo do tipo BLOB onde os arquivos para download ficam armazenados, mas o problema eh que ate agora nao consegui criar os links para downloads destes arquivos.

www.wrsistemas.com.br/updates.php

[3] Comentário enviado por elrafael em 12/04/2007 - 16:10h

Só uma dica....

Sempre verifique qdo o usuário poder passar valores de variáveis.

tipo, colocar ?arquivo=qualquer_coisa (inclusive sql injection)

de resto, tá simples e objetivo! parabéns!

[4] Comentário enviado por brunoestevao em 12/03/2008 - 14:50h

O tuto ta muito bom.
Se implementar um uso de sessão para impedir que o usuário altere o código, ficará ainda mais seguro.

Abraços

Bruno Estêvão
www.sempihost.com.br
Hospedagem de sites com 30 dias grátis


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts