<?PHP
$start = time();
if(!isset($_REQUEST['uid']))
$_REQUEST['uid'] = 1;
echo 'UID: ' . $_REQUEST['uid'] . '<br /><br />';
try {
$SQL = new PDO('mysql:host=localhost;dbname=database_name_here', 'root', 'mysql_password');
} catch (PDOException $e) {
print "Critical error! Can't connect to database.";
exit;
}
if(isset($_REQUEST['a']) && $_REQUEST['a'] == 'update_servers_list')
{
for($i = 1; $i <=25; $i++)
{
$x = @file_get_contents('http://otservlist.org/list-server_players_online-desc-' . $i . '.html');
preg_match_all ( '/<a href="\/ots\/([0-9]+)">(.*?)<\/a><\/th>/' , $x , $res);
foreach($res[2] as $ip)
if(substr ( $ip, -3, 3) != '...')
$SQL->query('INSERT INTO `servers` (`domain`, `added`) VALUES (' . $SQL->quote($ip) . ', ' . time() . ')');
}
echo 'Done.';
}
elseif(isset($_REQUEST['a']) && $_REQUEST['a'] == 'update_servers_status')
{
$master = curl_multi_init();
$nodes = array();
foreach($SQL->query('SELECT * FROM `servers` WHERE `web` = 0 ORDER BY `lastup` LIMIT 10 OFFSET ' . (rand(0,10) * 10)) as $data)
{
$SQL->query('UPDATE `servers` SET `lastup` = ' . time() . ' WHERE `id` =' . $data['id']);
$nodes[$data['id']]['o'] = curl_init('http://' . $data['domain'] . '/account/register');
curl_setopt($nodes[$data['id']]['o'], CURLOPT_RETURNTRANSFER, true);
curl_setopt($nodes[$data['id']]['o'], CURLOPT_TIMEOUT, 15);
curl_multi_add_handle($master, $nodes[$data['id']]['o']);
$nodes[$data['id']]['g1'] = curl_init('http://' . $data['domain'] . '/?subtopic=createaccount');
curl_setopt($nodes[$data['id']]['g1'], CURLOPT_RETURNTRANSFER, true);
curl_setopt($nodes[$data['id']]['g1'], CURLOPT_TIMEOUT, 15);
curl_multi_add_handle($master, $nodes[$data['id']]['g1']);
$nodes[$data['id']]['g2'] = curl_init('http://' . $data['domain'] . '/indexx.php?subtopic=createaccount');
curl_setopt($nodes[$data['id']]['g2'], CURLOPT_RETURNTRANSFER, true);
curl_setopt($nodes[$data['id']]['g2'], CURLOPT_TIMEOUT, 15);
curl_multi_add_handle($master, $nodes[$data['id']]['g2']);
$nodes[$data['id']]['m'] = curl_init('http://' . $data['domain'] . '//index.php/account/create');
curl_setopt($nodes[$data['id']]['m'], CURLOPT_RETURNTRANSFER, true);
curl_setopt($nodes[$data['id']]['m'], CURLOPT_TIMEOUT, 15);
curl_multi_add_handle($master, $nodes[$data['id']]['m']);
$nodes[$data['id']]['n'] = curl_init('http://' . $data['domain'] . '/new.php');
curl_setopt($nodes[$data['id']]['n'], CURLOPT_RETURNTRANSFER, true);
curl_setopt($nodes[$data['id']]['n'], CURLOPT_TIMEOUT, 15);
curl_multi_add_handle($master, $nodes[$data['id']]['n']);
}
do {
curl_multi_exec($master,$running);
sleep(1);
echo (time() - $start) . ' - ' .$running . '<br>';
} while($running > 0);
echo '<br><br><br><br><br><br><br>';
foreach($nodes as $id => $data)
{
$contentg1 = curl_multi_getcontent($data['g1']);
$contentg2 = curl_multi_getcontent($data['g2']);
$contento = curl_multi_getcontent($data['o']);
$contentm = curl_multi_getcontent($data['m']);
$contentn = curl_multi_getcontent($data['n']);
curl_multi_remove_handle($master, $data['g1']);
curl_multi_remove_handle($master, $data['g2']);
curl_multi_remove_handle($master, $data['o']);
curl_multi_remove_handle($master, $data['m']);
curl_multi_remove_handle($master, $data['n']);
$webacc = 0;
if(stripos($contentg1, 'src="layouts') || stripos($contentg2, 'src="layouts'))
$webacc = 1;
elseif(stripos($contento, 'action="/account'))
$webacc = 2;
elseif(stripos($contentm, "create.ide"))
$webacc = 3;
elseif(stripos($contentn, 'action="/new.php'))
$webacc = 4;
echo $id . ' - ' . $webacc . '<br>';
$SQL->query('UPDATE `servers` SET `web` = ' . $webacc . ', `lastup` = ' . time() . ' WHERE `id` =' . $id);
}
curl_multi_close ( $master);
echo '<SCRIPT type="text/javascript">
window.location = "http://ots.me/server-website-stats/?a=update_servers_status&uid='. ($_REQUEST['uid']+1) .'";
</SCRIPT>';
}
else
echo '<a href="?a=update_servers_list" target="_blank">Update servers list</a><br /><a href="?a=update_servers_status" target="_blank">Update servers status</a>';
echo '<br><br><br>Load time: ' . (time() - $start);
?>