[Admin] tierrilopes Posted March 24, 2017 at 02:34 PM Share Posted March 24, 2017 at 02:34 PM Contador para números de jogadores em cada reino. Citando outro post: 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 5 minutos por exemplo, independentemente do número de acesso na página. Para tal, criar este ficheiro na base do vosso dedicado (será usado /cron_rank_jogadores.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_rank_jogadores.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();} // Ranking de jogadores $sql = mysqli_query($con, "SELECT name, level, exp FROM player LEFT JOIN account.account ON account_id = account.id WHERE account.status = 'OK' AND name NOT LIKE '[%' ORDER BY level DESC, exp DESC LIMIT 5"); // TOP 5 $jogadores = "array("; $i = 1; while($row = mysqli_fetch_assoc($sql)){ $jogadores .= "{$i} => \"Jogador:{$row["name"]} Nivel:{$row["level"]} Experiência:{$row["exp"]}\",";$i++;} $jogadores .= ")"; //Escrever conteúdo do ficheiro dump_reinos $file = fopen($dumpFile, "w"); fwrite($file, "<?php\n\n"); fwrite($file, " /* Gerado pelo cron */\n\n"); fwrite($file, " \$ranking_jogadores = " . $jogadores . ";\n"); fwrite($file, "\n\n?>");fclose($file); //Limpar resultado da query de ranking de jogadores mysqli_free_result($sql); //Fechar ligação mysqli_close($con);?> Ajustar a localização do ficheiro dump_rank_jogadores.php (caso seja diferente) Preencher os dados de ligação à base de dados e gravar o ficheiro. Criar um ficheiro vazio chamado dump_rank_jogadores.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: #Ranking jogadores TOP 5*/5 * * * * php /cron_rank_jogadores.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_rank_jogadores.php"; Para mostrar o resultado, devem ter um echo/print com a variável de uma query. Basta mudarem/adicionarem o nome dessas variáveis. Mostrar jogador no primeiro lugar: $ranking_jogadores[1]; Mostrar jogador no segundo lugar: $ranking_jogadores[2]; Mostrar jogador no terceiro lugar: $ranking_jogadores[3]; Mostrar jogador no quarto lugar: $ranking_jogadores[4]; Mostrar jogador no quinto lugar: $ranking_jogadores[5]; Reiniciar o crontab com o seguinte comando: /etc/rc.d/cron restart O crontab chamará o ficheiro /cron_rank_jogadores.php a cada 5 minutos. Executará duas query, na qual obterá o top 5 jogadores, ordenados por nivel mais alto e por maior quantidade de experiência. Excluirá as contas que não estiverem normais (account_status = OK) e nomes começados por [ (para excluir os GM). Gravará tudo para o ficheiro dump_raking_jogadores.php Desta maneira, todos os pedidos ao website utilizarão a informação colocada no ficheiro dump_ranking_jogadores.php, poupando bastantes querys. (duas por carregamento de página) Exemplo: Link to comment
[Admin] tierrilopes Posted September 28, 2017 at 09:13 PM Author Share Posted September 28, 2017 at 09:13 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