Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Fehler in Funktion (Reload-Funktion)





Frage

Ich wollte mir sowas wie eine Reload-Sperre basteln und hab auch einpaar Funktionen dazu geschrieben, nur ist bei einer Funktion ein Fehler drin! Erstmal zur Erläuterung der Funktion: Diese Funktion soll gucken, ob eine IP-Adresse schon in meiner Textdatei steht, wenn ja, soll die Zeit, die dahinter steht, aktualisiert werden! Wen diese IP da noch nicht steht, soll halt eine neue Zeile mit der IP und der Zeit hinzugefügt werden! Aufbau der Textdatei ist z.B.:[code] 127.0.0.23""1036155836 127.0.0.1""1036155723 127.0.0.122""1036155664 [/code] Meine Funktion lautet folgendermaßen:[code] function iphinzu($dateiname, $ip){ $dateiinhalt = file($dateiname); $zeit = time(); $vorhanden = false; for ($i = 0; $i <= count($dateiinhalt) - 1; $i++){ $infos = split("\"\"", $dateiinhalt[$i]); if($infos[0] == $ip){ $vorhanden = true; $infos[1] = $zeit; $dateiinhalt[$i] = join("\"\"", $infos); break; } } if($vorhanden == false) { array_push($dateiinhalt, $ip."\"\"".$zeit); } $ausgabe = join("\r\n", $dateiinhalt); $fp = fopen($dateiname, "w"); flock($fp, 2); fputs($fp, $ausgabe); flock($fp, 3); fclose($fp); } [/code] Das Problem ist, dass sich zwischen allen Einträgen immer mehr leere Zeilen in die Textdatei einfügen! Erst ist da keine Leerzeile, dann eine, dann drei, sieben, 15, 31, ... Ich hoffe, einer von euch kann mir helfen! mfg, Ümit

Antwort 1 von semi

Versuche es mit
join("\n", $dateiinhalt);

Du findest ein funktionierendes Skript unter http://www.php4-forum.de/beispiele/ip_sperre.htm

Gruß,
Michael


Antwort 2 von misterUE

Danke für die Hilfe, aber das geht leider auch nicht! Dann bleiben zwischen "\n" immer noch die leeren Stellen bzw. werden immer mehr "\n" hinzugefügt!
Also eigentlich wollte ich nicht direkt einen Counter mit Reloadsperre sondern nur, dass bei der jeweiligen IP-Addresse die Zeit eingetragen wird! Ausgewertet wird das über eine andere Funktion (, die klappt)!

Hier hab ich mein Problem etwas genauer beschrieben:

Inhalt der Textdatei ist:

127.0.0.23""1036155836
127.0.0.1""1036155723
127.0.0.122""1036155664


Jetzt kommt einer mit einer anderen IP-Addresse (z.B.: 120.0.0.44), dann soll diese IP mit der Zeit da hinzugefügt werden. Beispiel:

127.0.0.23""1036155836
127.0.0.1""1036155723
127.0.0.122""1036155664
120.0.0.44""1036156534


Wenn jetzt eine IP kommt, die schon vorher eingetragen wurde (z.B.: 127.0.0.122, soll nur die Zeit verändert werden: Beispiel:

127.0.0.23""1036155836
127.0.0.1""1036155723
127.0.0.122""1036158841
120.0.0.44""1036156534


Vielen vielen Dank für Hilfe!

mfg, Ümit

P.S.: Wie kann ich z.B. den 5. Wert eines Arrays löschen und die anderen Werte sollen dann dementsprechend verschoben werden (also $array[6] wird zu $array[5] usw.)? Dann kann ich das ja vielleicht damit bewerkstelligen!

Antwort 3 von semi

Siehe array_splice in PHP-Handbuch.
Beispiel:

$a = array("a", "b", "c", "d");
echo $a[2] . "<br>"; // c
array_splice($a, 2, 1); // offset: 2, length: 1 
echo $a[2] . "<br>"; // d

Gruß,
Michael

Antwort 4 von semi

Übrigens, Du kannst auch direkt mit array_filter, die Zeilen, ohne Inhalt filtern.

function matchNotEmptyLines($var) {
  return !empty($var);
}
function printItem($item, $key) {
  echo "$key: $item<br>\n";
}
$a = array("a", "b", "", "c", "", "d");
$a = array_filter($a, "matchNotEmptyLines");
array_walk($a, "printItem");


Antwort 5 von misterUE

Vielen Dank für die Hilfe, klappt jetzt alles super!

mfg, Ümit

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: