Ok, ich hab es mittlerweile schon selbst herausgefunden:
Als erstes liest man mit file alles ein und implodiert den Array des Inhalts:
PHP:
$conts = implode("\n", file("logfile.txt"));
Dann lässt man eine Schleife durch den String laufen, der alle Adressen
orts ausliest, darstellt und aus dem String löscht. Das macht man deswegen, da sonst immer die selbe Adresse/Port gefunden würde und man eine Endlosschleife hätte:
PHP:
while( preg_match("/([0-9]{1,3}\.){3}[0-9]{1,3}\:[0-9]{1,5}/", $conts, $ip) )
{
$ip = $ip[0];
echo "IP: $ip<br />";
$conts = preg_replace("/$ip/", "", $conts);
}
Das Logfile wird dabei nicht verändert, nur der Inhalt im Speicher.
Vielleicht braucht das jemand noch einmal.
PS: Erklärung des Regex (Regulären Ausdrucks)
[0-9] => Alle Ziffern von 0-9 suchen
{1,3} => Es dürfen nur 1 - 3 Ziffern hintereinander stehen
([0-9]{1,3}\.) => Das sind die ersten 3 Teile des IP-Adressen-Oktetts
Demzufolge muss noch ein Oktett hinten angehängt werden
([0-9]{1,3}\.)
[0-9]{1,3}
\:[0-9]{1-5} => Wir wissen nicht, welche Portnummer es ist, also kann die Portnummer 1 bis 5 Ziffern lang sein.
Der Backslash escaped die Zeichen, da ein Punkt oder ein Doppelpunkt durchaus Zeichen sind, die ebenfalls ein Regulärer Ausdruck sein können. Wir wollen aber, das diese Zeichen tatsächlich als Zeichen anerkannt werden.
Fragen?