Ik moet héél vaak een ID aan de hand van een IP opzoeken. De IP-ranges en ID's staan in een tabel in de database, samen met een tijd-range. Zo kan een IP-range op verschillende tijdstippen een verschillend ID hebben.
De tabel:
De code die ik nu gebruik om een ID op te zoeken:
$id ziet er dus bijvoorbeeld zo uit: $id[14]["IP"] = 192.168.0.1 en $id[14]["timestamp"] = 123456;
De IP's zijn in de database opgeslagen als longip. Oftewel: 192*256^3 + 168*256^2 + 0*256 + 1;
Als ik deze functie 4000 keer aanroep achter elkaar duurt het véél te lang. Ik ben gisteravond van 9 tot 5 bezig geweest hem te verbouwen en te verbouwen.. Maar sneller werd ie niet
Iemand anders ideeën?
De tabel:
code:
1
2
3
4
5
6
7
8
9
| +---------------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+----------------------+------+-----+---------+-------+ | id | smallint(5) unsigned | | | 0 | | | startip | int(10) unsigned | | | 0 | | | endip | int(10) unsigned | | | 0 | | | startdatetime | datetime | YES | | NULL | | | enddatetime | datetime | YES | | NULL | | +---------------+----------------------+------+-----+---------+-------+ |
De code die ik nu gebruik om een ID op te zoeken:
PHP:
1
| <?// Get the hosts$result = mysql_query ("SELECT id, startip, endip, startdatetime, enddatetime FROM hosts ORDER BY (endip - startip)");while ($temp = mysql_fetch_array ($result)) { $hosts["$temp[1],$temp[2],$temp[3],$temp[4]"] = $temp[0];}for ($i = 0; $i < count($ips); $i++) { getid ($ips[$i]["IP"], $ips[$i]["timestamp"], $hosts); // Code gestripped die het ID verder verwerkt}function getid ($longip, $timestamp, $hosts) { $longip = explode (".", $longip); $longip = ($longip[0] * pow (256, 3)) + ($longip[1] * pow (256, 2)) + ($longip[2] * 256) + $longip[3]; $timestamp = mktime (substr ($timestamp, 11, 2), substr ($timestamp, 14, 2), substr ($timestamp, 17, 2), substr ($timestamp, 5, 2), substr ($timestamp, 8, 2), substr ($timestamp, 0, 4)); foreach ($hosts as $hostdata => $id) { $hostdata = explode (",", $hostdata); if (($longip >= $hostdata[0]) && ($longip <= $hostdata[1]) && ($timestamp >= $hostdata[2]) && (($timestamp <= $hostdata[3]) || ($hostdata[3] == 0))) { return $id; } } return 0;}?> |
$id ziet er dus bijvoorbeeld zo uit: $id[14]["IP"] = 192.168.0.1 en $id[14]["timestamp"] = 123456;
De IP's zijn in de database opgeslagen als longip. Oftewel: 192*256^3 + 168*256^2 + 0*256 + 1;
Als ik deze functie 4000 keer aanroep achter elkaar duurt het véél te lang. Ik ben gisteravond van 9 tot 5 bezig geweest hem te verbouwen en te verbouwen.. Maar sneller werd ie niet