[Admin] tierrilopes Posted March 24, 2017 at 02:25 PM Share Posted March 24, 2017 at 02:25 PM Contador para jogadores online. Hoje em dia, a maioria dos websites, cada vez que a página é carregada executa uma query para obter os jogadores online consoante o last_play. Isto pode ser abusado para sobrecarregar a base de dados. Uma alternativa bastante simples e rápida de implementar é fazer com que esta query só seja executada uma vez a cada 5minutos por exemplo, independentemente do número de acesso na página. Para tal, criar este ficheiro na base do vosso dedicado (será usado /cron_online.php como exemplo) e colar o seguinte conteúdo: <?php /*Tierri LopesAbyssMt2 CMS https:/tlthings.net*/ //Localização do ficheiro de dump $dumpFile = "/usr/local/www/apache24/data/dump_cache.php"; //Ligação à base de dados $con =mysqli_connect("localhost","utilizador","password","player"); //ip, user, password, db //Aviso em caso de erro ao ligar à base de dados if (mysqli_connect_errno()){echo "Failed to connect to MySQL: " . mysqli_connect_error();} //Jogadores nos últimos 5 minutos $sql = mysqli_query($con, "SELECT COUNT(*) FROM player WHERE last_play > DATE_SUB(NOW(), INTERVAL 5 MINUTE)"); $online5m = mysqli_fetch_array($sql); //Jogadores nas últimas 24 horas $sql2 = mysqli_query($con, "SELECT COUNT(*) FROM player WHERE last_play > DATE_SUB(NOW(), INTERVAL 1 DAY)"); $online1d = mysqli_fetch_array($sql2); //Escrever conteúdo do ficheiro dump_cache $file = fopen($dumpFile, "w"); fwrite($file, "<?php\n\n"); fwrite($file, " /* Gerado pelo cron */\n\n"); fwrite($file, " \$online5m = \"{$online5m[0]}\";\n"); fwrite($file, " \$online1d = \"{$online1d[0]}\";\n"); fwrite($file, "\n\n?>"); fclose($file); //Limpar resultado da query de 5 minutos mysqli_free_result($sql); //Limpar resultado da query de 24 horas mysqli_free_result($sql2); //Fechar ligação à base de dados mysqli_close($con);?> Ajustar a localização do ficheiro dump_cache.php (caso seja diferente) Preencher os dados de ligação à base de dados e gravar o ficheiro. Criar um ficheiro vazio chamado dump_cache.php (na localização definida no código acima) e dar-lhe permissões 646. Abrir o ficheiro /etc/crontab Debaixo de: # Save some entropy so that /dev/random can re-seed on boot.*/11 * * * * operator /usr/libexec/save-entropy Colar isto debaixo: #Jogadores online metin2*/5 * * * * php /cron_online.php >/dev/null 2>&1 No vosso ficheiro index.php (ou onde tiverem o código de jogadores online), adicionem o seguinte no topo do ficheiro (após <?php): include "dump_cache.php"; Para mostrar o resultado, devem ter um echo/print com a variável de uma query. Basta mudarem o nome dessa variável. Caso queiram mostrar os jogadores nos últimos 5 minutos, o nome da variável é: $online5m Caso queiram mostrar os jogadores nas últimas 24horas, o nome da variável é: $online1d Reiniciar o crontab com o seguinte comando: /etc/rc.d/cron restart O crontab chamará o ficheiro /cron_online.php a cada 5 minutos. Executará duas query, na qual obterá os jogadores online (com base no last_play) nos últimos 5 minutos assim como nas últimas 24 horas. Gravará tudo para o ficheiro dump_cache.php. Desta maneira, todos os pedidos ao website utilizarão a informação colocada no ficheiro dump_cache.php, poupando bastantes querys. Link to comment
[Admin] tierrilopes Posted September 28, 2017 at 09:18 PM Author Share Posted September 28, 2017 at 09:18 PM Correção de texto. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now