Skip to content

Cant update 3000 servers in database #754

@realrootsec

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);
}
?>

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