#!/usr/bin/env php #file updated from http://razor.arnes.si/~asija3/files/server-status-logger.php at 1. June 2019 at 17:53 #!/usr/bin/env php loadHTMLFile($urltoget); //discard white space $dom->preserveWhiteSpace = false; //the table by its tag name $tables = $dom->getElementsByTagName('table'); //get all rows from the table $rows = $tables->item(0)->getElementsByTagName('tr'); // get each column by tag name $cols = $rows->item(0)->getElementsByTagName('th'); $row_headers = NULL; foreach ($cols as $node) { //print $node->nodeValue."\n"; $row_headers[] = $node->nodeValue; } $table = array(); //get all rows from the table $rows = $tables->item(0)->getElementsByTagName('tr'); foreach ($rows as $row) { // get each column by tag name $cols = $row->getElementsByTagName('td'); $row = array(); $i=0; foreach ($cols as $node) { # code... //print $node->nodeValue."\n"; if($row_headers==NULL) $row[] = $node->nodeValue; else $row[$row_headers[$i]] = $node->nodeValue; $i++; } $table[] = $row; } return $table; } class MyDB extends SQLite3 { function __construct() { global $dbfile; $this->open($dbfile); } } $dbConnect = new MyDB(); if(!$dbConnect) { exit($dbConnect->lastErrorMsg()); } else { echo "Opened database successfully\n"; } $tablename = "dnevnik"; $result = $dbConnect->query('CREATE TABLE IF NOT EXISTS '.$tablename.' ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "timestamp" INTEGER, "worker" INTEGER, "client" TEXT, "vhost" TEXT, "request" TEXT )'); $countTable = $dbConnect->querySingle("SELECT COUNT(*) as count FROM ".$tablename.""); $countTable = true; while($countTable) { // if table is ok while true basically echo "r"; $table = tablefromhtml($url); end($table); $lastkey = key($table); for($i=1;$i <= $lastkey;$i++) { $unique = false; $smt = $dbConnect->prepare("SELECT `client`, `request` FROM ".$tablename." WHERE `worker` = :worker ORDER BY `timestamp` DESC LIMIT 1"); $smt->bindValue(':worker', explode('-', $table[$i]["Srv"]), SQLITE3_TEXT)[0]; @$query = $smt->execute(); // string>array notice $row = $query->fetchArray(SQLITE3_ASSOC); if(!is_array($row) || empty(array_diff($row, array($table[$i]["Client"], $table[$i]["Request"])))) { $unique = true; } if($table[$i]["Client"] != "::1" && $unique) { // ::1 because localhost is always querying for some reason via IPv6 on my target server $smt = $dbConnect->prepare("INSERT INTO ".$tablename." (timestamp, worker, client, vhost, request) VALUES ( :timestamp, :worker, :client, :vhost, :request )"); $smt->bindValue(':timestamp', date("U"), SQLITE3_TEXT); $smt->bindValue(':worker', explode('-', $table[$i]["Srv"])[0], SQLITE3_TEXT); $smt->bindValue(':client', $table[$i]["Client"], SQLITE3_TEXT); $smt->bindValue(':vhost', $table[$i]["VHost"], SQLITE3_TEXT); $smt->bindValue(':request', $table[$i]["Request"], SQLITE3_TEXT); $query = false; while(!$query) { $query = @$smt->execute(); if($query) { echo "."; } else { echo "x"; } } } } } ?>