Instalando o contador de download - visão geral dos plug-ins para WordPress. Crie um contador de download de arquivo usando PHP e MySQL. O contador de download de Php é armazenado em um arquivo

Decidi ver quantas vezes um dos meus scripts é baixado do site. Para isso decidi escrever um contador de download de arquivos para o site. Existem muitas implementações dessa tarefa na Internet, mas mesmo assim, dê uma olhada na minha solução.

A lógica do contador de download é bastante simples. Vamos usar meu ajax favorito para implementá-lo. Aguardamos o botão quando o evento clik ocorre, chamamos via ajax para arquivo php contador. No php, a solicitação ajax é processada e o número total de downloads é gravado em um arquivo de texto. Após uma entrada bem-sucedida, uma resposta é retornada com um contador total de download e o usuário é redirecionado a um link para fazer download do arquivo (o arquivo está sendo baixado). Aqui está uma lógica tão simples. Agora vamos começar a implementá-la. Vamos criar um arquivo test.zip para download com antecedência. Vamos codificar o botão e mostrar o contador de corrida.

Número de corridas:

Criamos um botão com id \u003d "btnSend", exibiremos o contador em span com id \u003d "countView", armazenaremos um link para o arquivo baixado no atributo de download de dados

Agora vamos anexar um manipulador de clique ao botão. Já usaremos js e jquery aqui. Você pode ler sobre como implementar o clik usando jquery. Mas antes de instalar o manipulador de cliques, faremos o ajax do arquivo count.php, que contém todo o trabalho do contador. Você pode ler mais sobre a transferência de dados ajax. Isso é necessário para gerar a saída do arquivo onde o contador grava, o número de downloads já feitos e exibi-los em um intervalo com id \u003d "countView"

/ * obter o número atual de downloads * / $ (document) .ready (function () (// proibir o armazenamento em cache da solicitação ajax // caso contrário, o contador violará $ .ajaxSetup ((cache: false)); var html; $ .ajax ((// como vamos transferir tipo de dados: "GET", // onde transferimos url: "count.php", // quais dados transferimos dados: (flag: 2), // evento após receber uma resposta de count.php success : function (data) (html \u003d data; // exibir o número atual de downloads $ ("# countView"). html (html);))); / * travar o evento no botão de download do arquivo * / var clickevent \u003d false; // click check flag // click handler $ ("# btnSend"). click (function () (if (! clickevent) ($ .ajax ((// como vamos passar o tipo de dados: "GET", // onde passamos url: "count.php", // quais dados estamos passando dados: (flag: 1), // evento antes de enviar ajax beforeSend: function () (// se o botão foi pressionado, então outro clickevent \u003d true;), // evento depois de receber a resposta, // obter os dados em sucesso de dados: função (dados) (// após realizar as ações, resolvemos novamente // processando clique no botão clickevent \u003d false; html \u003d dados; // exibe um novo contador $ ("# countView"). html (html); // obtenha o link do download de dados // redirecione para o link de download, baixe o arquivo window.location.href \u003d $ ("# btnSend"). data ("download"); ))); ) return false; // proíbe o processamento do evento ao clicar)); ));

Para evitar outro clique errôneo no botão enviar, introduzi o sinalizador clickevent no script. Até que uma resposta de count.php com dados atualizados do contador seja retornada, clicar no botão será proibido. Acho que o trabalho do código depois de clicar no botão é mais ou menos claro. Após clicar no botão de download, os dados são transferidos para o arquivo count.php, onde são processados \u200b\u200be os dados do contador atualizado são retornados, ocorre um redirecionamento para o link de download e, consequentemente, o arquivo é baixado.

Vamos agora quebrar o coração do nosso script, ou seja, o arquivo count.php.

Função clearInt ($ date) (// converter data para um número não negativo return abs ((int) $ date);) if ($ _ SERVER ["HTTP_X_REQUESTED_WITH"] \u003d\u003d "XMLHttpRequest") (// verificar qual sinalizador foi recebido se (clearInt ($ _ GET ["flag"] \u003d\u003d 1)) (// abrir o arquivo para leitura $ f \u003d fopen ("mycount.txt", "a +"); // bloquear o acesso ao arquivo de outros programas flock ($ f, LOCK_EX); // obtém o valor do contador do arquivo $ count \u003d fread ($ f, 100); // mais o contador @ $ count ++; // apaga o arquivo ftruncate ($ f, 0); // come um novo contador lendo fwrite ($ f, $ count); // feche o arquivo fclose ($ f); // retorna o valor echo $ count;) if (clearInt ($ _ GET ["flag"] \u003d\u003d 2)) ($ c \u003d fopen (" mycount.txt "," a + "); flock ($ c, LOCK_EX); $ festc \u003d fread ($ c, 100); fclose ($ c); // valor de retorno echo $ festc;))

Aqui também acho que tudo é simples. Se o sinalizador 1 vier, reescreveremos o contador. Se o sinalizador 2 vier, os dados sobre o número de downloads serão simplesmente retornados. Acho que tudo o mais está claro nos comentários do código.

Contador de download do Joomla

Decidi anexar um contador semelhante a um dos meus projetos no joomla. Em teoria, é claro, você precisa escrever um módulo separado ou integrar o código no controlador do componente de conteúdo com, de modo que os dados do contador sejam gravados não em um arquivo, mas no banco de dados e para cada artigo separadamente. Mas não há tempo para tal desenvolvimento, e resolvi o problema de forma mais simples. Eu precisava de um contador para uma página. Peguei o arquivo count.php e transferi para o template do Joomla, que está conectado atualmente (na raiz dos templates do site / your_template). Não se esqueça de inserir o código definido ("_ JEXEC") ou morrer no topo de count.php; (isso é para joomla). Inserimos o botão de upload na página que estamos criando e o código js também pode ser incorporado à página ou conectado em um arquivo separado. Por exemplo, tenho um arquivo separado (localizado na pasta js do modelo). No próprio modelo no cabeçalho, a conexão ocorre por meio do código

E não se esqueça de obter com uma solicitação ajax, nos referimos a url: "/index.php?tmpl\u003dcount", não url: "count.php" ,. Simplesmente assim, acabei de parafusar o contador de download de arquivos para o joomla.

Você pode ver links para baixar arquivos em muitos sites. Por exemplo, empresas de manufatura em suas páginas oficiais publicam instruções para um produto específico. Além disso, os desenvolvedores de software também oferecem um download gratuito de seu programa, dando ao usuário uma visão geral de suas funções e operação.

Ao configurar um arquivo para download gratuito, é importante saber quantas vezes ele foi baixado. Isso é necessário, em primeiro lugar, para as estatísticas, cuja análise ajudará a determinar a utilidade da informação para o usuário final.

Como faço para definir um contador de download em meu site WordPress?

Não há como ver essas estatísticas entre as ferramentas do WordPress. Portanto, usaremos uma solução de terceiros - o plugin Kama Click Counter.

Plugin Kama Click Counter

Plugin grátis Contador de cliques Kama fornece todas as ferramentas necessárias para contar com precisão o número de downloads de um arquivo específico. Portanto, primeiro, ele precisa ser instalado e ativado. Por exemplo, vamos exibir na página de postagem um link para pdf-file, para o qual contaremos o número de downloads. Deve-se observar que os arquivos são carregados no site usando métodos padrão. Bibliotecas de mídia WordPress ( Mídia -\u003e Adicionar Novo) Em seguida, você precisa abrir uma postagem ou página para edição. Na parte de conteúdo, você precisa colocar o cursor no local onde o link para o arquivo será colocado e clicar no botão que aparece na barra de ferramentas do editor visual.

Em uma janela pop-up, o plug-in solicitará que você selecione o arquivo baixado anteriormente. Para fazer isso, pressione o botão com o ícone da lupa.

Na biblioteca de mídia, selecione o arquivo desejado e clique no botão Selecione um arquivo.

Como resultado, um código de acesso especial será inserido na parte de conteúdo da postagem ou página, que serve para exibir o link para download do arquivo.

Depois de atualizar o material (botão Atualizar), você pode acessar o site para visualizá-lo.

O plugin também é capaz de mostrar estatísticas de download na área do usuário do site - no widget. Observe que o plugin, por padrão, não mostra no widget números específicos de quais e quantas vezes foi baixado. Apenas uma lista dos arquivos baixados com mais frequência é exibida. Para fazer isso, vá para a seção de administração Aparência -\u003e Widgets e arraste o widget KSS: Downloads Principais para o local desejado da barra lateral.

Você pode ver que existem várias opções disponíveis no widget que permitem que você modifique a lista.

Aqui você pode definir os seguintes parâmetros básicos:

  • título do widget (campo Título);
  • o número de arquivos de saída na lista ( quantos links mostrar?);
  • resultados de classificação ( como classificar o resultado?);
  • personalizando a aparência do modelo (blocos Modelo e Template CSS).

Um recurso do plugin é a personalização flexível do modelo. Aqui você pode usar as chamadas tags, no lugar das quais esta ou aquela informação será exibida.

Após todas as configurações do widget terem sido feitas e salvas (botão Salve ), você pode ver o resultado no site.

Para baixar o Contador, siga as instruções simples.

  1. Para baixar o arquivo de instalação, clique no botão azul "Baixar do servidor" localizado logo acima.
  2. Depois disso, o servidor irá preparar e verificar se há vírus no arquivo de instalação.
  3. Se o arquivo não estiver infectado e tudo estiver em ordem, um botão cinza Download aparecerá.
  4. Clicar no botão "Download" iniciará o download do arquivo para o seu computador.

Não pedimos que você passe pelo enfadonho processo de registro ou envie SMS para confirmação. Basta fazer o download e usá-lo para a saúde \u003d)

Como instalar o contador

Para instalar o programa, siga as instruções simples que se aplicam à maioria dos programas.

  1. Execute o arquivo baixado clicando duas vezes nele. Todos os arquivos de instalação são retirados dos sites oficiais dos desenvolvedores.A data da última atualização do arquivo Counter versão 1.1 foi 28 de dezembro de 2016 às 4:38 am.
  2. Na janela que aparece, aceite o contrato de licença. Você também pode se familiarizar com o contrato de licença no site oficial do desenvolvedor do programa.
  3. Selecione os componentes que deseja instalar. Desmarque as caixas que podem ser para instalar programas adicionais.
  4. Selecione a pasta em seu computador onde deseja instalar o programa. Na maioria dos casos, o programa seleciona automaticamente a pasta, por exemplo, no Windows é C: \\ Arquivos de programas \\
  5. Finalmente, o gerenciador de instalação do programa pode solicitar que você crie um "Atalho na área de trabalho" ou "Pasta do menu Iniciar".
  6. Em seguida, o processo de instalação começará. Após a conclusão, o gerenciador de instalação pode solicitar que você reinicie o computador para que o programa funcione mais corretamente.

No artigo de hoje, criaremos um sistema de rastreamento de upload de arquivos simples, mas confiável. Cada arquivo terá uma linha correspondente no banco de dados onde o número total de downloads desse arquivo será armazenado. O PHP atualizará o banco de dados MySQL e redirecionará os usuários para os arquivos apropriados.

Para rastrear o número de downloads, você só precisa fazer upload dos arquivos para a pasta correta e usar um URL específico para acessá-los.

Etapa 1 - XHTML

Primeiro, precisamos da marcação XHTML. É muito simples - é um bloqueio comum gerenciador de arquivoscontendo uma lista com marcadores em que o link para cada arquivo estará dentro do elemento li.

Os arquivos para os quais o número de downloads será levado em consideração devem ser enviados para a pasta arquivoslocalizado no diretório raiz do script (você pode ver como a estrutura do arquivo está organizada no arquivo com o exemplo fornecido). O PHP fará um loop por todos os arquivos na pasta e adicionará cada arquivo como um elemento li separado a uma lista com marcadores.

demo.php

  • photoShoot-1.0.zip 0 baixar

Observe que o atributo href y link passa o nome do arquivo enviado como um parâmetro para o arquivo download.php... É aqui que os downloads são contados, como você verá mais tarde.

Você não precisa usar esta interface específica para organizar a contagem de downloads. Você pode simplesmente postar links para download.php nas páginas do blog ou do site e todos os downloads serão contados corretamente.

Etapa 2 - CSS

Com nossa marcação XHTML pronta, podemos nos concentrar na aparência e no comportamento de nosso script. Os estilos CSS abaixo atribuem a aparência ao bloco do gerenciador de arquivos por meio de seu ID, uma vez que só o temos na página. O resto dos elementos são estilizados usando nomes de classe.

style.css

# gerenciador de arquivos (cor de fundo: #EEE; borda: 1px sólido #DDD; margem: 50px auto; preenchimento: 10px; largura: 400px;) ul.manager li (background: url ("img / bg_gradient.gif") repeat-x center bottom # F5F5F5; border: 1px sólido #DDD; border-top-color: #FFF; list-style: none; position: relative;) ul.manager li a (display: block; padding: 8px;) ul.manager li a: hover .download-label (/ * Quando uma lista é pairada sobre, mostra o texto verde de download dentro dela: * / display: block;) span.download-label (background-color: # 64B126; border : 1px sólido # 4E9416; cor: branco; visor: nenhum; tamanho da fonte: 10px; preenchimento: 2px 4px; posição: absoluto; direito: 8px; decoração do texto: nenhum; sombra do texto: 0 0 1px # 315D0D; topo : 6px; / * CSS3 Rounded Corners * / -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px;) span.download-count (color: # 999; font-size: 10px; preenchimento: 3px 5px; posição: absoluta; decoração do texto: nenhum;)

Observe que aqui a assinatura de "download" está oculta por padrão usando a propriedade mostrar nenhum... É exibido através de display: block, apenas passando o mouse sobre o link, sem a necessidade de JavaScript. Um pouco de CSS3 é usado para arredondar os cantos da assinatura.

Etapa 3 - PHP

Como dissemos acima, o PHP percorre toda a pasta arquivose produz cada arquivo como um elemento de lista com marcadores. Vamos examinar mais de perto como isso acontece.

demo.php - Top

// Relatório de erros: error_reporting (E_ALL ^ \u200b\u200bE_NOTICE); // Incluindo o arquivo de conexão do banco de dados: require "connect.php"; $ extension \u003d ""; $ files_array \u003d array (); / * Abrindo o diretório de miniaturas e percorrendo todos os polegares: * / $ dir_handle \u003d @opendir ($ directory) ou die ("Há um erro com o diretório de seu arquivo!"); while ($ file \u003d readdir ($ dir_handle)) (/ * Ignorando os arquivos de sistema: * / if ($ file (0) \u003d\u003d ".") continue; / * end () retorna o último elemento da matriz gerada por a função explode (): * / $ extension \u003d strtolower (end (explode (".", $ file))); / * Ignorando os arquivos php: * / if ($ extension \u003d\u003d "php") continue; $ files_array \u003d $ file;) / * Classificando os arquivos em ordem alfabética * / sort ($ files_array, SORT_STRING); $ file_downloads \u003d array (); $ result \u003d mysql_query ("SELECT * FROM download_manager"); if (mysql_num_rows ($ result)) while ($ row \u003d mysql_fetch_assoc ($ result)) (/ * A chave do array $ file_downloads será o nome do arquivo e conterá o número de downloads: * / $ file_downloads [ $ row ["filename"]] \u003d $ row ["downloads"];)

Observe como buscamos todos os registros da tabela download_manager com mysql_query () e, em seguida, adicione-os ao array $ file_downloads, com nome de arquivo de chave de array e downloads de valor. Assim, mais adiante no código, podemos escrever $ file_downloads [‘archive.zip’]e imprima o número de downloads deste arquivo.

Abaixo está o código que é usado para gerar os elementos li da lista com marcadores.

demo.php - parte central

Foreach ($ files_array as $ key \u003d\u003e $ val) (echo "

  • ". $ val." ". (int) $ file_downloads [$ val]." baixar
  • "; }

    É muito simples - nós passamos por um ciclo para cada por matriz $ files_arraye exiba os dados necessários na página na marcação apropriada.

    Agora, vamos examinar mais de perto como os downloads são rastreados.

    download.php

    // Relatório de erros: error_reporting (E_ALL ^ \u200b\u200bE_NOTICE); // Incluindo o arquivo de conexão: require ("connect.php"); if (! $ _ GET ["arquivo"]) erro ("Parâmetro ausente!"); if ($ _ GET ["arquivo"] (0) \u003d\u003d ".") erro ("Arquivo errado!"); if (file_exists ($ directory. "/". $ _ GET ["file"])) (/ * Se o visitante não for um mecanismo de pesquisa, conte o download: * / if (! is_bot ()) mysql_query ("INSERT INTO download_manager SET filename \u003d "". mysql_real_escape_string ($ _ GET ["file"]). "" ON DUPLICATE KEY UPDATE downloads \u003d downloads + 1 "); header (" Location: ". $ directory." / ". $ _ GET [" arquivo "]); sair;) else error (" Este arquivo não existe! "); / * Funções auxiliares: * / function error ($ str) (die ($ str);) function is_bot () (/ * Esta função verificará se o visitante é um robô de mecanismo de pesquisa * / $ botlist \u003d array ("Teoma" , "alexa", "froogle", "Gigabot", "inktomi", "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory", "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot", "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp", "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg "," rabaz "," Baiduspider "," Feedfetcher-Google "," TechnoratiSnoop "," Rankivabot "," Mediapartners-Google "," Sogou web spider "," WebAlta Crawler "," TweetmemeBot "," Butterfly "," Twitturls "," Me.dium "," Twiceler "); foreach ($ botlist as $ bot) (if (strpos ($ _ SERVER [" HTTP_USER_AGENT "], $ bot)! \u003d\u003d false) return true; // É um bot) return false; // Não é um bot)

    Aqui, certifique-se de verificar se o visitante é um robô de mecanismo de pesquisa rastreando seus links. Os robôs são bons visitantes porque ajudam a listar seu site nos mecanismos de pesquisa, mas, em nosso caso, eles podem distorcer suas estatísticas de download. É por isso que o banco de dados só é atualizado após a verificação do visitante. is_bot ().

    Etapa 4 - MySQL

    Conforme mencionamos na etapa anterior, o número de downloads é registrado como uma string na tabela download_manager do banco de dados MySQL. Primeiro, deixe-me explicar como essa parte da consulta funciona:

    download.php

    INSERT INTO download_manager SET filename \u003d "filename.doc" ON DUPLICATE KEY UPDATE downloads \u003d downloads + 1

    A primeira parte da consulta diz ao MySQL para inserir uma nova linha na tabela gerenciador de downloade defina o valor do campo nome do arquivo igual ao nome do arquivo solicitado para download. Além disso, o campo nome do arquivo definido como um índice único em uma tabela. Isso significa que uma linha com um nome de arquivo específico pode ser inserida apenas uma vez, caso contrário, ocorrerá um erro ao duplicar os campos-chave.

    É neste caso que entra em vigor a segunda parte do pedido - NA ATUALIZAÇÃO DE CHAVE DUPLICADAo que aumenta o valor do campo transferências por um se este arquivo já estiver gravado no banco de dados.

    Assim, novos arquivos serão inseridos automaticamente no banco de dados na primeira vez após serem carregados.

    Etapa 5 - jQuery

    Para tornar nosso contador de download mais descritivo, seria bom adicionar a capacidade de atualizar o contador ao lado do nome do arquivo imediatamente após o usuário iniciar o download. Por enquanto, o usuário precisa recarregar a página para ver os novos valores do contador.

    Isso pode ser corrigido com um pequeno trecho de código:

    script.js

    $ (document) .ready (function () (/ * Este código é executado após o DOM ter sido completamente carregado * / $ ("ul.manager a"). click (function () (var countSpan \u003d $ (". download -count ", this); countSpan.text (parseInt (countSpan.text ()) + 1);));));

    Acabamos de atribuir um manipulador de eventos para o clique no link. Cada vez que o usuário clica no link, aumentamos o valor do download atual em um.

    Etapa 6 - htaccess

    Há mais uma coisa a fazer antes que o trabalho possa ser chamado de concluído. Você já deve ter notado que alguns tipos de arquivos, o navegador tenta abrir imediatamente por padrão. Em vez disso, precisamos começar a baixar o arquivo. É muito fácil fazer isso adicionando algumas linhas dentro do arquivo .htaccesslocalizado na pasta arquivos:

    Aplicativo ForceType / fluxo de octeto

    É isso, nosso contador de download está pronto.

    Conclusão

    Para executar este exemplo em seu próprio servidor, você precisa criar a tabela download_manager no banco de dados MySQL, ao qual você obviamente tem acesso. No arquivo com um exemplo, há um arquivo table.sqlque contém o código SQL necessário que criará a tabela necessária.

    Depois disso, basta inserir os dados de conexão do banco de dados no arquivo configuration.php.

    Não houve aulas sobre PHP e MySQL por muito tempo. Hoje vamos criar um contador de download simples, mas eficaz.

    Cada arquivo terá uma linha na tabela do banco de dados. O número de downloads do arquivo será salvo na mesma tabela.PHP irá atualizar o banco de dadosMySQL e redirecionar o usuário para o arquivo necessário.

    Para rastrear o número de downloads de qualquer arquivo, você precisa colocá-lo na pastaarquivos e use um URL especial para se referir a ele.

    Passo 1 - XHTML

    A primeira etapa é criar a marcação para nosso script. É muito simples - temosgerenciador de arquivos div, que contém uma lista não ordenada na qual cada item da lista é responsável por um arquivo.

    Os arquivos que você deseja rastrear foram colocados na pastaarquivos na pasta raiz do script.PHP em seguida, ele percorre todos os arquivos e adiciona cada um como um item de lista (li ) em uma lista não ordenada.

    demo.php


    • photoShoot-1.0.zip 0 baixar

    Observe que o atributohref links passa o nome do arquivo como um parâmetro paradownload.php. é aqui que ocorre o rastreamento do número de downloads.

    Você não precisa exibir tudo da mesma maneira - você pode apenas criar um link paradownload.php em suas páginas e todos os downloads não passarão.

    Passo 2 - CSS

    Após a marcação, vamos começar com o layout.CSS as regras abaixo referem-se agerenciador de arquivos div com id (# caractere), uma vez que ocorre apenas 1 vez na página e para o resto dos elementos por nomes de classes.

    styles.css

    # gerenciador de arquivos (cor de fundo: #EEE; borda: 1px sólido #DDD; margem: 50px automático; preenchimento: 10px; largura: 400px;)
    ul.manager li (background: url ("img / bg_gradient.gif") repeat-x center bottom # F5F5F5; border: 1px solid #DDD; border-top-color: #FFF; list-style: none; position: relative ;) ul.manager li a (display: block; padding: 8px;) ul.manager li a: hover .download-label (/ * Ao passar o mouse, mostra download de texto verde: * / display: block;) span. download-label (background-color: # 64B126; border: 1px solid # 4E9416; color: white; display: none; font-size: 10px; padding: 2px 4px; position: absoluto; right: 8px; text-decoration: none ; sombra do texto: 0 0 1px # 315D0D; topo: 6px; / * CSS3 Cantos arredondados * /
    -moz-border-radius: 3px; -webkit-border-radius: 3px; raio da borda: 3px; ) span.download-count (color: # 999; font-size: 10px; preenchimento: 3px 5px; posição: absoluta; decoração do texto: nenhum;)

    Etapa 3 -PHP

    Como eu disse antes, o PHP procura por arquivos na pasta de arquivos e produz cada arquivo como um item de lista em uma lista não ordenada. Vamos dar uma olhada em como vai

    demo.php - parte do topo

    // Soo relatando erros: relatório_erro (E_ALL ^ \u200b\u200bE_NOTICE); //: requer "connect.php"; $ extension \u003d ""; $ files_array \u003d array (); / * Abra a pasta e percorra todos os arquivos: * / $ dir_handle \u003d @opendir ($ directory) or die ("Há um erro com o diretório do seu arquivo!"); while ($ file \u003d readdir ($ dir_handle)) (/ * Ignorando arquivos do sistema: * / if ($ file (0) \u003d\u003d ".") continue; / * fim () imprime o último elemento do array gerado pela função explode (): * / $ extension \u003d strtolower (end (explode (".", $ file))); / * Pular arquivos php: * / if ($ extension \u003d\u003d "php") continue; $ files_array \u003d $ file; ) / * Classifique os arquivos em ordem alfabética * / sort ($ files_array, SORT_STRING); $ file_downloads \u003d array (); $ result \u003d mysql_query ("SELECT * FROM download_manager"); if (mysql_num_rows ($ result)) while ($ row \u003d mysql_fetch_assoc ($ result)) (/ * chave de array $ file_downloads será o nome do arquivo, e conterá o número de downloads: * / $ file_downloads [$ row ["filename"]] \u003d $ row ["downloads"]; )

    Observe como selecionamos todas as linhas da tabela download_manager usando mysql_query () e, posteriormente, as adicionamos ao array $ file_downloads com o nome do arquivo como uma chave para a contagem de download. Portanto, mais adiante no código, podemos escrever $ file_downloads ["archive.zip"] e imprimir o número de downloads.

    Abaixo está o código que gera os itens da lista:

    demo.php - parte do meio

    Foreach ($ files_array as $ key \u003d\u003e $ val) (echo "

  • ". $ val." ". (int) $ file_downloads [$ val]." baixar
  • "; }

    Tudo é feito simplesmente com o loop foreach do $ files_array. Então tudo ecoa.

    Agora, vamos dar uma olhada mais de perto em como funciona o rastreamento de arquivos.

    download.php

    // Verificação de erros: error_reporting (E_ALL ^ \u200b\u200bE_NOTICE); // Ligue o arquivo de conexão DB: require ("conectar.php"); if (! $ _ GET ["arquivo"]) erro ("Parâmetro ausente!"); if ($ _ GET ["arquivo"] (0) \u003d\u003d ".") erro ("Arquivo errado!"); if (file_exists ($ directory. "/". $ _ GET ["file"])) (/ * If e o visitante não é um bot de pesquisa, conte o download: * / if (! is_bot ()) mysql_query ("INSERT INTO download_manager SET filename \u003d" ". mysql_real_escape_string ($ _ GET [" file "])." "ON DUPLICATE KEY UPDATE downloads \u003d downloads + 1"); header ("Location:". $ directory. "/". $ _ GET ["file"]); Saída; ) senão erro ("Este arquivo não existe!"); / * funções auxiliares: * / erro de função ($ str) (die ($ str);) function is_bot () (/ * Esta função de verificação para um robô * / $ botlist \u003d array ("Teoma", "alexa", "froogle", "Gigabot", "inktomi", "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory", "Ask Jeeves", "TECNOSEEK "," InfoSeek "," WebFindBot "," girafabot "," crawler "," www.galaxy.com "," Googlebot "," Scooter "," Slurp "," msnbot "," appie "," FAST ", "WebBug", "Spade", "ZyBorg", "rabaz", "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot", "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler" , "TweetmemeBot", "Butterfly", "Twitturls", "Me.dium", "Twiceler"); foreach ($ botlist as $ bot) (if (strpos ($ _ SERVER ["HTTP_USER_AGENT"], $ bot)! \u003d\u003d false) return true; // É um bot) return false; // Não é um bot)

    É importante verificar se o seu visitante é um ser humano ou um robô de mecanismo de busca. Os robôs são bons, mas não vamos deixá-los distorcer nossas estatísticas. É por isso que a linha no banco de dados é atualizada somente após a verificação de is_bot ().

    Passo 4 -MySQL

    Como observamos na última etapa, o número de downloads é salvo como uma linha na tabela download_manager. Primeiro, vamos explicar como essa consulta funciona:

    download.php

    INSERT INTO download_manager SET filename \u003d "filename.doc" ON DUPLICATE KEY UPDATE downloads \u003d downloads + 1

    Ele diz ao MySQL para inserir uma nova linha na tabela download_manager e definir o campo de linha do nome do arquivo para o valor do arquivo chamado para download. No entanto, o campo do nome do arquivo é designado como um índice exclusivo na tabela. Isso significa que cada linha só pode ser inserida uma vez, caso contrário, ocorrerá um erro de chave duplicada.

    É aqui que a segunda parte da consulta funcionará - ON DUPLICATE KEY UPDATE dirá ao MySQL para adicionar uma unidade à coluna de download se o arquivo já existir no banco de dados.

    Assim, novos arquivos serão adicionados automaticamente ao banco de dados durante o primeiro download.

    Etapa 5 - jQuery

    Para fazer o rastreamento em tempo real, convém atualizar o contador ao lado do nome do arquivo após cada download.

    Faremos isso com jQuery:

    script.js

    $ (documento) .ready (função () (/ * O código é executado depois que a página é carregada * / $ ("ul.manager a"). click (function () (var countSpan \u003d $ (". download-count", this); countSpan.text (parseInt (countSpan.text ()) + 1);) ); ));

    Simplesmente atribuímos um manipulador de cliques aos links que levam aos arquivos e, a cada clique, adicionamos um valor.

    Etapa 6 -htaccess

    Há mais uma coisa a ser feita. Download.php irá redirecionar o usuário para o arquivo solicitado, que foi passado como parâmetro. No entanto, você deve ter notado que os navegadores tentam abrir alguns tipos de arquivos diretamente. Precisamos iniciar o download. Isso pode ser feito com algumas linhas dentro do arquivo .htacess localizado na pasta de arquivos.

    Aplicativo ForceType / fluxo de octeto

    Agora nosso contador está completamente pronto!

    Conclusão

    Para que a demonstração funcione, você precisa recriar a tabela download_manager no banco de dados MySQL. Você pode encontrar o código SQL necessário na fonte.

    Depois disso, adicione seus dados para se conectar ao banco de dados no arquivo configuration.php.