[Admin] tierrilopes Posted March 24, 2017 at 02:28 PM Share Posted March 24, 2017 at 02:28 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_reinos.php como exemplo) e colar o seguinte conteúdo: <?php /*Tierri Lopes AbyssMt2 CMS https://tlthings.net*/ //Localização do ficheiro de dump $dumpFile = "/usr/local/www/apache24/data/dump_reinos.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 do reino shinsoo $sql = mysqli_query($con, "SELECT COUNT(*) FROM player_index WHERE empire = 1"); $shinsoo = mysqli_fetch_array($sql); //Jogadores do reino chunjo $sql2 = mysqli_query($con, "SELECT COUNT(*) FROM player_index WHERE empire = 2"); $chunjo = mysqli_fetch_array($sql2); //Jogadores do reino jinno $sql3 = mysqli_query($con, "SELECT COUNT(*) FROM player_index WHERE empire = 3"); $jinno = mysqli_fetch_array($sql3); //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, " \$jogadores_shinsoo = \"{$shinsoo[0]}\";\n"); fwrite($file, " \$jogadores_chunjo = \"{$chunjo[0]}\";\n"); fwrite($file, " \$jogadores_jinno = \"{$jinno[0]}\";\n"); fwrite($file, "\n\n?>"); fclose($file); //Limpar resultado da query de jogadores do reino shinsoo mysqli_free_result($sql); //Limpar resultado da query de jogadores do reino chunjo mysqli_free_result($sql2); //Limpar resultado da query de jogadores do reino jinno mysqli_free_result($sql3); //Fechar ligação mysqli_close($con);?> Ajustar a localização do ficheiro dump_reinos.php (caso seja diferente) Preencher os dados de ligação à base de dados e gravar o ficheiro. Criar um ficheiro vazio chamado dump_reinos.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 em reinos*/5 * * * * php /cron_reinos.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_reinos.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. Caso queiram mostrar os jogadores do reino shinsoo o nome da variável é: $jogadores_shinsoo Caso queiram mostrar os jogadores do reino chunjo o nome da variável é: $jogadores_chunjo Caso queiram mostrar os jogadores do reino jinno o nome da variável é: $jogadores_jinno Reiniciar o crontab com o seguinte comando: /etc/rc.d/cron restart O crontab chamará o ficheiro /cron_reinos.php a cada 5 minutos. Executará três query, na qual obterá os jogadores do reino shinsoo, chunjo e jinno. Gravará tudo para o ficheiro dump_reinos.php. Desta maneira, todos os pedidos ao website utilizarão a informação colocada no ficheiro dump_reinos.php, poupando bastantes querys. (três por carregamento de página) Link to comment Share on other sites More sharing options...
[Admin] tierrilopes Posted September 28, 2017 at 09:16 PM Author Share Posted September 28, 2017 at 09:16 PM Correção de texto. Link to comment Share on other sites More sharing options...
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