Skip to content

Cant update 3000 servers in database #754

Description

@realrootsec

This is code it updates first ascending but dont want all, please help me to fix i tried with less servers to update like making batch from script instead pulling all 3000 servers but same, dont want to update all

<?php
ini_set('max_execution_time', 0);
ini_set('memory_limit', '-1');

require_once('connect_db.php');
require_once('GameQ/Autoloader.php');

if ($argc < 2) {
    die("Usage: php script.php <batch_number>\n");
}

$batch_number = (int)$argv[1];
$batch_size = 300;
$offset = ($batch_number - 1) * $batch_size;

$gq = new \GameQ\GameQ();
$servers = [];

$server_query = mysqli_query($conn, "SELECT id, ip, game FROM servers WHERE UNIX_TIMESTAMP() - last_update > 180 ORDER BY id ASC LIMIT $batch_size OFFSET $offset");

while ($server_row = mysqli_fetch_assoc($server_query)) {
    $servers[] = [
        'id' => $server_row['id'],
        'type' => $server_row['game'],
        'host' => $server_row['ip'],
    ];
}

//foreach (array_chunk($servers, 10) as $batch) {
    $gq->addServers($servers);
    $gq->setOption('timeout', 5);
//    $gq->setOption('blocking', true);

    $results = $gq->process();

    foreach ($results as $data) {
//        $gqip = $data["gq_address"] . ":" . $data["gq_port_client"];
//        $get_server_id_query = mysqli_query($conn, "SELECT id FROM servers WHERE ip='$gqip'");
//        $server_data = mysqli_fetch_assoc($get_server_id_query);
//        $server_id = $server_data['id'];

        $server_id = null;
        foreach ($servers as $server) {
                if ($server['host'] == $data["gq_address"] . ":" . $data["gq_port_client"]) {
                        $server_id = $server['id'];
                        break;
                }
        }

        if ($server_id === null) {
                continue;
        }

        if ($data['gq_online'] == "1") {
            $last_update = time();
            $hostname = mysqli_real_escape_string($conn, $data['gq_hostname']);
            $mapname = mysqli_real_escape_string($conn, $data['gq_mapname']);
            $num_players = mysqli_real_escape_string($conn, $data['gq_numplayers']);
            $max_players = mysqli_real_escape_string($conn, $data['gq_maxplayers']);
            $players = $data['players'];

            $hostname = !empty($hostname) ? $hostname : '---';
            $mapname = !empty($mapname) ? $mapname : '---';
            $max_players = !empty($max_players) ? $max_players : '---';

               // mysqli_query($conn, "DELETE FROM servers WHERE id='$server_id'");
                if ($hostname == "---" || $mapname == "---" || $max_players == "---") {
                    mysqli_query($conn, "UPDATE servers SET online='1', num_players='$num_players', last_update='$last_update' WHERE id='$server_id'");
                } else {
                    mysqli_query($conn, "UPDATE servers SET online='1', hostname='$hostname', mapname='$mapname', num_players='$num_players', max_players='$max_players', last_update='$last_update' WHERE id='$server_id'");
                }

                mysqli_query($conn, "DELETE FROM players WHERE sid='$server_id'");
                foreach ($players as $player) {
                    $player_nickname = mysqli_real_escape_string($conn, $player['gq_name']);
                    $player_score = mysqli_real_escape_string($conn, $player['gq_score']);
                    $player_time = mysqli_real_escape_string($conn, $player['time']);
                    $player_nickname = !empty($player_nickname) ? $player_nickname : 'anonymous';

                    mysqli_query($conn, "INSERT INTO players (id, nickname, score, time_online, mapname, sid) VALUES ('', '$player_nickname', '$player_score', '$player_time', '$mapname', '$server_id')");
                }
        } else {
            mysqli_query($conn, "UPDATE servers SET online='0', num_players='0' WHERE id='$server_id'");
            mysqli_query($conn, "DELETE FROM players WHERE sid='$server_id'");

//            $five_days_ago = time() - 432000;
         //   mysqli_query($conn, "DELETE FROM servers WHERE last_update < $five_days_ago");
        }
  //  }
  //  sleep(3);
}
?>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions