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.978 ]

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

Como fazer publicações pelo Instagram Web

Criando um sistema de banners rotativos em PHP

Criando um painel de rede em PHP

Semana da velharia no VOL

Entrevista com um hacker, via Internet

Leitura recomendada

Executando comandos DML em base de dados MySQL através do Eclipse PHP (Bônus: Temas e Fontes no Eclipse)

Criando backup do MySQL com o mysqldump

PHP com PostgreSQL - Estruturando a conexão

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

Armazenando datas de uma outra forma

  
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