Änfänger Frage ;-)

Kategorien: PHP & MySQL
4 Antworten
free24
free24 am Montag, 6. Februar 2006 um 19:22
Hallo zusammen Ich zeig euch zuerst den Code: <?php $ip = $_SERVER[&#039;REMOTE_ADDR&#039;]; $host = gethostbyaddr($ip); echo "IP Adresse: $ip<br>"; echo "Hostname: $host"; echo $name.", der ".$tag.". ".$monat." ".$jahr; $tage = array(0=>"Sonntag", 1=>"Montag", 2=>"Dienstag", 3=>"Mittwoch", 4=>"Donnerstag", 5=>"Freitag", 6=>"Samstag"); $monate = array(1=>"Januar", 2=>"Februar", 3=>"M&auml;rz", 4=>"April", 5=>"Mai", 6=>"Juni", 7=>"Juli", 8=>"August", 9=>"September", 10=>"Oktober", 11=>"November", 12=>"Dezember"); $monat = $monate[date("n")]; $name = $tage[date("w")]; $tag = date("d"); $jahr = date("Y"); $fn="test.txt"; $text="IP Adresse: $ip Host: $host Tag: $name, $tag $monat $jahr"; $fp=fopen($fn,"w"); fwrite($fp,$text); fclose($fp); ?> Jetzt möchte ich aber nicht das in der test.txt immer nur ein Eintrag steht und zwar immer von dem der gerade als letzter Online war, sondern alle die online waren- wie kann ich das jetzt proggen? Also etwas in dieser Zeile oder? $text="IP Adresse: $ip Host: $host Tag: $name, $tag $monat $jahr"; Also das nacher z.B das ganze so aussieht in der test.txt: Eintrag 1 ------------ Eintrag 2 ------------ ... Danke im Voraus!

Kommentare

FreaKzero
FreaKzero am Montag, 6. Februar 2006 um 20:58

Soviel ich weiss ists nicht möglich per php in einer Textdatei eine Leerzeile zu schreiben, was das mit dem ersten eintrag angeht das ist lediglich eine Berechtigungsfrage ich schreib dir hier 2 codes hin die dir hoffentlich helfen werden - einen zum schreiben / einen zum auslesen.

[b]write.php[/b]

<?php
$ip = $_SERVER[&#039;REMOTE_ADDR&#039;];
$host = gethostbyaddr($ip);

echo "IP Adresse: $ip<br>";
echo "Hostname: $host";
echo $name.", der ".$tag.". ".$monat." ".$jahr; $tage = array(0=>"Sonntag",
1=>"Montag",
2=>"Dienstag",
3=>"Mittwoch",
4=>"Donnerstag",
5=>"Freitag",
6=>"Samstag");

$monate = array(1=>"Januar",
2=>"Februar",
3=>"M&auml;rz",
4=>"April",
5=>"Mai",
6=>"Juni",
7=>"Juli",
8=>"August",
9=>"September",
10=>"Oktober",
11=>"November",
12=>"Dezember");

$monat = $monate[date("n")];
$name = $tage[date("w")];
$tag = date("d");
$jahr = date("Y");


$fn="test.txt";
$text="IP Adresse: $ip Host: $host Tag: $name, $tag $monat $jahr". "|";

$fp=fopen($fn,"a+");
fwrite($fp,$text);
fclose($fp);

?>


Ich hab an deinem code 2 Sachen geändert, erstens wird ein straightslash mitgespeichert in einer Zeile wie du siehst (=> |), der ist im read.php dann für die "trennung" der Zeilen notwendig. Und fopen($fn"a+") steht für LESEN UND SCHREIBEN - ab ENDE (nicht anfang) dann wird, automatisch am ende des letzten Eintrags weitergeschrieben

[b]read.php[/b]

<?
$fn="test.txt";
$fp=fopen($fn,"r");
$read_entries = fgets($fp);
$entries= explode("|", $read_entries);

for ($i=0;$i<count($entries);$i++)
{
echo "$entries[$i]<br>";
}
?>

Datei wird geöffnet, und die einträge ausgelesen (fgets), danach wird aus diesem "Massentext" per explode(); ein Array erstellt, 1 Array eintrag => jeweils bei |
dann noch per "for-schleife" wird das ganze ausgelesen - ende

[b]Erklärung der Schleife:[/b]
$i = ist unsere "nummer" wir besetzen sie mit dem Integer (nummer) 0 da unser Array bei 0 anfängt

[b]count($entries)[/b]
count(); zählt die Einträge in einem Array und gibt diese als Integer (nummer) aus
also bis der wert der uns count(); ausgibt, grösser wird als es eigentlich vorhanden sein dürfte (also zb 10 Einträge hat ein Array und er würde auf 11 hochzählen, bricht vorher unsere Schleife ab) - wird $i++ ausgeführt und $i++ ist ordinäres mathemathisches hochzählen einer Nummer.

[b]Beide Codes sind auf meinem Rechner per XAMPP getestet - müsste also ziemlich sicher funktionieren[/b]

natürlich wärs möglich, in der "write.php" statt dem straightslash ein BREAK unterzubringen und das ganze auf HTML zu speichern, aber ich denke das hier ist die schönere Variante - je nach Geschmack.

blackfeet
blackfeet am Dienstag, 7. Februar 2006 um 10:55


$text="IP Adresse: $ip Host: $host Tag: $name, $tag $monat $jahr". "\\n";


Dies müsste am ende jeder Zeile einen Umbruch einfügen (Neue Zeile).
Unter Windows sollte man "\\n\\r" verwenden. (Umbruch und Zeilenvorschub)

FreaKzero
FreaKzero am Dienstag, 7. Februar 2006 um 10:59

uha Oo sowas hätt ich selbst schonmal gebraucht - danke ^^

free24
free24 am Dienstag, 7. Februar 2006 um 21:53

@FreakZero und blackfeet: Danke der erste Code geht. So wollte ich es haben. Und mit dem "
" bekomme ich solche Einträge.