Wie file() auslesen

Dann schau der ja nur ob mehr als 0 Elemente im array sind und gibt true aus. Ich möchte aber wissen wie ich abfragen kann ob in dem array meine IP auftaucht.
Die preg_grep()-Funktion führt eine Suche nach Übereinstimmungen des Regulären Ausdrucks bei den Elementen eines Arrays durch und liefert die Treffer zurück. Wenn die Funktion also ein Array mit mindestens einem Element zurückliefert, gab es ebenfalls mindestens eine Übereinstimmung. Ist die Arbeitsweise der Funktion so schwer zu verstehen? Wozu gibt es denn Referenzbücher wie etwa das Online-PHP-Handbuch wenn diese nicht genutzt werden? Beim Entwickeln von Lösungen geht es darum sie selbst zu finden und nicht eine fertige Vorlage zu übernehmen.
 
ja das problem is aber wenn ich die ip.dat leere, also keine IP mehr drin steht zeigt er mir trotzdem true an ... obwohl er false ausgeben müsste, das ist mein problem.
 
Das Problem ist, dass du den Rückgabewert der Funktion falsch verarbeitest. Denn vergleicht man nur die Werte, ist der Ausdruck array() > 0 immer true.
 
ich habe echt keine ahnung wie ich das sonst abfragen/verarbeiten soll. Bin noch nicht solange mit php dabei und im php Handbuch hab ich aufm ersten Blick auch nix zu gefunden wie man das abfragen könnte.
 
Gut, bröseln wir das Ganze mal auf: Die preg_grep()-Funktion liefert ein Array mit Übereinstimmungen zurück. Da ein Wert des Typs Array mit einem des Typs Integer nicht vergleichbar ist – das Beispiel hat es gezeigt –, muss die Anzahl der Elemente des Rückgabe-Arrays ermittelt werden. Dies ist beispielsweise mit der sizeof()-Funktion oder dessen Alias, der count()-Funktion, möglich. Nun stehen sich zwei Werte des Typs Integer gegenüber, die problemlos verglichen werden können.
Schaffst du es nun anhand dieser Beschreibung allein?
 
das hilft mir auf jedenfall weiter. Mein weiteres vorgehen wäre:

Anzahl der EInträge im Array ermittelt mit hilfe von count. Dann kann ich ja mit $ip_array[eintrag im array] zB 2 den inhalt ermitteln. Das wollte ich mit ner schleife machen. Allerdings möchte die nicht so wie ich will. Die echo funktion is nur zum testen der schleife:

PHP:
<?php
$ip_list = "data/ip.dat";
$ip_user = $_SERVER['REMOTE_ADDR'];
$ip_array = file( 'data/ip.dat' );

$ip_test = (preg_grep('|^\s*'.preg_quote($_SERVER['REMOTE_ADDR']).'\s*$|',file('data/ip.dat')));
$ip_anzahl = count($ip_test);

for ($a=1; $a==$ip_anzahl; $a++) {
echo $ip_test[$a];
}
?>

Wenn ich ihne Schleife zB echo $ip_test[3]; mache gibt er mir die ip aus die auf platz 3 steht. funktioniert auch wenn den wert 3 durch eine Variable mit dem inhalt 3 ersetze. Wieso geht das in der Schleife nicht?
 
Ok, ich verrate dir die Lösung:
PHP:
<?php

	$matches = preg_grep('/^'.preg_quote($_SERVER['REMOTE_ADDR']).'(?:\x0A|\x0D\x0A|\x0D)$/m', file('data/ip.dat'));
	if( count($matches) > 0 ) {
		echo 'Es gibt '.count($matches).' Übereinstimmung(-en).';
	} else {
		echo 'Es gibt keine Übereinstummungen.';
	}

?>
 
omg, jetzt wo ich es sehe könnt ich mich schlagen. Ich danke dir. Jetzt leuchte es auch ein :) Finde es aber gut das du den Leute nicht immer gleich die Lösung verrätst sondern versuchst sie auf den Lösungsweg zuführen ;)

Danke

*als erledigt abhack*
 
Zurück