Array in Datei schreiben |
languitar
Foren-Team Threadstarter
Beiträge: 2795 |
Ich versuch mich mal wieder an nem simplen Textcounter mit IP sperre und wollte das jetzt so realisieren, dass ich in einem Array 'datum' => heute und dann die ganzen heutigen IPs schreibe. Das ganze wollte ich dann in ner Textdatei speichern und bei jedem aufruf des Counters erstmal überprüfen, ob das Datum gleich ist, sont wird das array gelöscht oder ansonsten die IPs überprüfen.
Ich hab aber momentan das Problem, dass wenn ich das Array in ner Date speichern will da immer nur "Array" steht und nicht der Inhalt. Wie mach ich das denn???
Gruß
Johannes
|
 Profil
Editieren
Zitieren
|
Can
Halbgott
Beiträge: 1324 |
Wenn es ein normales index-orientieres Array ist, musst du es in einer Schleife durchgehen und jedes Element speichern:
$file=fopen("datei.txt","w");
for ($idx=0;$idx
fputs($file,$array . "n");
fclose($file);
Das Lesen ist erheblich einfacher:
$array=file("datei.txt");
---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox
|
 Profil
E-Mail
Editieren
Zitieren
|
languitar
Foren-Team Threadstarter
Beiträge: 2795 |
danke, genau das brauchte ich
|
 Profil
Editieren
Zitieren
|
languitar
Foren-Team Threadstarter
Beiträge: 2795 |
son mist, ich benutze folgenden code und in der datei steht dann nur:
Array
Array
Code:
/*--Beziehen der IP des Besuchers--*/
$ip = getenv("REMOTE_ADDR");
/*--Beziehen des aktuellen Datums--*/
$date = date("d.m.Y");
$log = array();
$log[] = $date;
$log[] = $ip;
print_r($log);
$datei = fopen("ip.txt","w");
for ($idx=0;$idx
fputs($datei,$log . "n");
fclose($datei);
|
 Profil
Editieren
Zitieren
|
c3o
Posting-Schinder
Beiträge: 585 |
Du musst
fputs($datei,$log . "n");
durch
fputs($datei,$log[$idx] . "n");
ersetzen.
Eine einfachere Möglichkeit, die das Array in nur einer Zeile speichert (und wohl auch mit multidimensionalen Arrays, Hashes usw funktioniert), wäre aber das:
$datei = fopen("ip.txt","w");
fputs($datei,serialize($log));
fclose($datei);
und zum Lesen:
$inhalt = unserialize(implode('', file('ip.txt')));
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
Can
Halbgott
Beiträge: 1324 |
*mich-schäme-und-für-den-restlichen-abend-im-boden-versink*
---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox
|
 Profil
E-Mail
Editieren
Zitieren
|
languitar
Foren-Team Threadstarter
Beiträge: 2795 |
danke, habs auf jedenfall jez schon etwas weiter, dafür kommen jez die nächsten probleme. der Code ist jetzt (völlig unformatiert) dieser:
/*--Beziehen der IP des Besuchers--*/
$ip = getenv("REMOTE_ADDR");
/*--Beziehen des aktuellen Datums--*/
$date = date("d.m.Y");
/*--Beziehen des aktuellen Counterstandes aus Datei--*/
$counter = file_get_contents("stand.txt");
echo "$counter";
/*$log = array();
$log[] = $date;
$log[] = $ip;*/
/*$datei = fopen("ip.txt","w");
for ($idx=0;$idx
fputs($datei,$log[$idx] . "n");
fclose($datei);*/
/*--ip.txt zum Vergleich in Array &log lesen--*/
$log = file("ip.txt");
if ($log[0] = $date) {
/*--Wenn Datum gleich, dann suchen ob IP vorhanden--*/
foreach ($log as $value) if ($value = $ip) $vorhanden = 1;
//echo "$vorhanden ";
/*--Wenn die IP nicht vorhanden ist, wird der Counter um 1 erhöht und die IP geschpeichert--*/
if ($vorhanden = 1) {
$log[] = $ip;
print_r($log);
$counter++;
$datei = fopen("stand.txt","w"); //Counterstand speichern
fputs($datei,$counter);
fclose($datei);
$datei = fopen("ip.txt","wb"); //IPs speichern
foreach ($log as $value)
fputs($datei,$value . "n");
fclose($datei);
};
};
Das erste Problem ist, dass er mir die Variable $vorhanden nicht auf 1 setzt, obwohl die IP in dem Array vorhanden ist. Desswegen hab ich auch zum weiteren Test die nächste IF-Abfrage auch falschrum gesetzt. musst jetzt ncht beachtet werden.
Da ist aber das problem, wenn ich die Seite mehrmals aktualisiere sieht das arra plötzlich so aus:
Array ( [0] => 18.01.2003 [1] => 127.0.0.1 [2] => [3] => [4] => [5] => 127.0.0.1 [6] => [7] => 127.0.0.1 [8] => 127.0.0.1 )
Der bastelt mir in der Datei ip.txt also unmengen leerzeilen rein und ich weiß nicht wieso. Zum testen musst du die beiden Dateien ip.txt und stand.txt gerade anlegen.
Und was ich auch nicht verstehe: Wieso steht im ersten Schlüssel des Arrays immer das Datum. das hab ich doch gar nicht angegeben, dass er das machen soll. steht doch nur als Kommentar da.
Gruß
Johannes
|
 Profil
Editieren
Zitieren
|
languitar
Foren-Team Threadstarter
Beiträge: 2795 |
hab jetzt glaube ich mein Problem gefunden, weiß aber nicht, wie ich das ändern kann.
Zum einen hab ich ein "=" in den Abfragen vergessen. Das größere Problem ist aber, dass ich mit jedem Zeilenumbruch in der datei ip.txt im array (also wenn ich das neu reinlade) ein Leerzeichen hinter meinen Wert bekomme
Wie kann ich das denn ändern?
|
 Profil
Editieren
Zitieren
|
c3o
Posting-Schinder
Beiträge: 585 |
Das kommt wohl davon, dass die Elemente des Arrays nach dem Auslesen mit file() jeweils am Ende noch einen Zeilenumbruch n haben. Beim neu speichern hängst du den aber nochmal an -> Leerzeilen dazwischen.
Den müsstest du rausfiltern { $log[$i] = str_replace("n", ', $log[$i]) } oder du nimmst die Methode die ich früher gepostet hab, wo du dich mit Zeilenumbrüchen nicht auseinanderschlagen musst weils in einer einzigen Zeile gespeichert wird.
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
languitar
Foren-Team Threadstarter
Beiträge: 2795 |
habs inzwischen alle s gelößt, nur mit tripod zusammen läuft das leider nicht...
|
 Profil
Editieren
Zitieren
|
c3o
Posting-Schinder
Beiträge: 585 |
Wieso denn nicht?
[Übrigens amüsiere ich mich gerade über meine Wortschöpfung "auseinanderschlagen".. "herumsetzen" wär auch ganz nett]
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
languitar
Foren-Team Threadstarter
Beiträge: 2795 |
Hab mit FTP schon mmächtig Probleme meine Dateien hochzubekommen. Die kommen ständig leer an und das gleich scheint auch mit dem fputs zu passieren. Der Counter fängt immer mal wieder bei 0 an zu zählen...
|
 Profil
Editieren
Zitieren
|