Hi!
Ich habe hier 2 Funktionen is_blocked und block_ip. Beide haben gemeinsam, daß sie zunächst eine Datei laden, welche hintereinander IP-Adressen gespeichert hat. Diese Datei wird - in block_ip - per fwrite($file,$element."\n") geschrieben, besitzt also nach jeder IP-Adresse \n als Zeilentrenner. Beim Ladevorgang werden aus dem beim Laden mittels file entstehenden Array über eliminate_endchar die Zeilenendzeichen aller Elemente eines eindimensionalen Arrays entfernt (substr($element,0,-1)). Das funktioniert eigentlich auch überall, nur irgendwie nicht in is_blocked:
function is_blocked($ip) {
// FIXME: irgendwie wird \n nicht eliminiert
$lines = file("data/block_ip.dat");
$block=eliminate_endchar($lines);
//return is_element($ip,$block);
return 0; // NOTE: funktion is_blocked deaktiviert
}
function block_ip($ip) {
$lines = file("data/block_ip.dat");
$block=eliminate_endchar($lines);
if (is_element($ip,$block)==0) {
$block=array_merge($block,array($ip));
}
$file = fopen("data/block_ip.dat","w");
foreach ($block as $element) {
fwrite($file,$element."\n");
}
fclose($file);
recalc_all_avgs();
}
[/php]
Die Datei wird korrekt nach $lines geladen, jedoch werden die Zeilenendzeichen nicht entfernt. Eigenartigerweise funktioniert auch eine Suche is_element($ip."\n",$block) nicht, was theoretisch gehen sollte, wenn nur eliminate_endchar ein Problem hätte. Eigenartigerweise ist is_blocked die einzige Funktion mit dieser Macke, in allen anderen Funktionen läuft alles bestens.
Zuerst dachte ich, daß evtl. ein Steuerzeichen den PHP-Interpreter verwirrt oder ich irgendwie einen Tippfehler reingehauen hätte. Also habe ich die (dort funktionierenden) Zeilen aus block_ip kopiert. Leider scheint das nicht das Problem zu sein. Einen Fehler an den verwendeten Funktionen schließe ich aus, da sie wie gesagt im kompletten restlichen Skript wunderbar funktionieren. Habt Ihr eine Idee, wo der Fehler liegen könnte? Für mich sieht das genau identisch aus. :confused:
Danke.