Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Array in Datei schreiben Antworten
Array in Datei schreiben

languitar
Foren-Team


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

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

Can
Halbgott


Beiträge: 1330


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<count($array);$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


Beiträge: 2795


danke, genau das brauchte ich

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

languitar
Foren-Team


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<count($log);$idx++)
fputs($datei,$log . "n");
fclose($datei);

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

c3o
Posting-Schinder


Beiträge: 586


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: 1330


*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


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<count($log);$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<br>";
/*--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

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

languitar
Foren-Team


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?

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

c3o
Posting-Schinder


Beiträge: 586


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


Beiträge: 2795


habs inzwischen alle s gelößt, nur mit tripod zusammen läuft das leider nicht...

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

c3o
Posting-Schinder


Beiträge: 586


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


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...

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren
 

Antworten
Nach oben