Leeren des Inhaltes einer txt datei!

Die Scriptsprache PHP für die Gestaltung von dynamischen Websites.

Leeren des Inhaltes einer txt datei!

Beitragvon Lapi » Fr 30 Jan, 2004 18:56

leute ich bin am ende ... ich hab nirgendst was gefunden ... hier erstmal der code:

<?php

$datei = fopen("counter.txt","r+");
$dateiip = fopen("ip.txt","r+");
$dateizeit = fopen("zeit.txt","r+");
$dateidatum = fopen("datum.txt","r+");
$userip = $REMOTE_ADDR;
$timestamp = time();

$zeitaktuell = date("hi", $timestamp);
$datumaktuell = date("m", $timestamp);

$ip = fgets($dateiip,16);
$zeitdatei = fgets($dateizeit,5);
$datumdatei = fgets($dateidatum,3);
$counterstand = fgets($datei, 10);

rewind($dateiip);
rewind($dateizeit);
rewind($dateidatum);
rewind($datei);

if ($ip == $userip and $zeitaktuell == $zeitdatei and $datumdatei == $datumaktuell)
{
}
else
{
if($counterstand == "")
{
$counterstand = 0;
}
$counterstand++;

fwrite($datei, $counterstand);
fwrite($dateidatum, $datumaktuell);
fwrite($dateizeit, $zeitaktuell);

fwrite($dateiip, $userip);
}

echo "Counter: <font color=\"red\">", $counterstand, "</font>";

fclose($dateiip);
fclose($dateizeit);
fclose($dateidatum);
fclose($datei);

?>

wie ihr warscheinlich schon gesehen habt ... soll das hier einen kleinen counter mit reloadsperre darstellen.

mein problem ist jetzt jenes welches:

benuter nr1 hat die ip: 255.255.255.255

was auch gleich bei seinem besuch in die textdatei ip.txt gespeichert wird

benutzer nr2 hat die ip: 255.255.1.255 und das wird natürlich wieder gleich in die textdatei gespeichert .... nun steht aber nicht 255.255.1.255 in der datei sondern 255.255.1.25555 ... was zur folge hat das der ganze code nicht mehr läuft.

jetzt müsste ich wissen mit welchem befehl ich den inhalt der textdatei lösche.

mfg Lapi
Lapi
Neu im Board
Neu im Board
 
Beiträge: 5
Registriert: Fr 30 Jan, 2004 18:45

Beitragvon eLgino » Fr 30 Jan, 2004 21:53

du willst die file "leeren"/"löschen"/"neu anlegen"?

exec("rm bla.txt");
exec("touch bla.txt");
exec("chmod 777 bla.txt");

kA bin kein PHP-Coder aber das wär logisch das das funken würde!
eLgino
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 74
Registriert: Fr 11 Jul, 2003 12:53
Wohnort: Wien-Meidling

thx

Beitragvon Lapi » Fr 30 Jan, 2004 23:06

danke dir für deine prompte antwort ... jedoch hat dein tipp nicht funktioniert.

aus irgendeinem grund funkt mein counter nichtmehr sobald ich die datein mit w+ öffne ... ich muss es also mit r+ machen .. da ich mit r+ aber keine neuen datein am server schreiben kann muss ich die datei vorher mit r+ öffnen sie auslesen dan schließen sie löschen dan mit w+ wieder erzeugen gleich wieder schließen und sie wieder mit r+ öffnen ... is zwar a bissl a pfusch aber bei einem so kleinen script dürfte das wohl kaufm ins gewicht fallen ... hier der code!

<?php

$datei = fopen("counter.txt","r+");
$dateiip = fopen("ip.txt","r+");
$dateizeit = fopen("zeit.txt","r+");
$dateidatum = fopen("datum.txt","r+");
$userip = $REMOTE_ADDR;
$timestamp = time();

$zeitaktuell = date("hi", $timestamp);
$datumaktuell = date("m", $timestamp);

$ip = fgets($dateiip,16);
$zeitdatei = fgets($dateizeit,5);
$datumdatei = fgets($dateidatum,3);
$counterstand = fgets($datei, 10);

rewind($dateiip);
rewind($dateizeit);
rewind($dateidatum);
rewind($datei);

if ($ip == $userip and $zeitaktuell == $zeitdatei and $datumdatei == $datumaktuell)
{
}
else
{
if($counterstand == "")
{
$counterstand = 0;
}
$counterstand++;

fwrite($datei, $counterstand);
fwrite($dateidatum, $datumaktuell);
fwrite($dateizeit, $zeitaktuell);
fclose($dateiip);
unlink("ip.txt");
$dateiip = fopen("ip.txt","w+");
fclose($dateiip);
$dateiip = fopen("ip.txt","r+");
fwrite($dateiip, $userip);
}

echo "Counter: <font color=\"red\">", $counterstand, "</font>";

fclose($dateiip);
fclose($dateizeit);
fclose($dateidatum);
fclose($datei);

?>

falls einer erkennt warum das mit w+ nicht gehen kann wäre ich ihm sehr dankbar wen er mir sein wissen mitteilt!

mfg Lapi
Lapi
Neu im Board
Neu im Board
 
Beiträge: 5
Registriert: Fr 30 Jan, 2004 18:45

Beitragvon lordpeng » Sa 31 Jan, 2004 22:22

>exec("rm bla.txt");
>exec("touch bla.txt");
>exec("chmod 777 bla.txt");

nur mal so ein einwurf ... wenns schon unbedingt systembefehle sein sollen, dann wenigstens so wenig wie möglich, z.b.

exec("echo \"\"> bla.txt")

>kA bin kein PHP-Coder aber das wär logisch das das funken würde!
ich auch ned, aber wenn man zum überschreiben einer datei einen systembefehl braucht dann isses grundsätzlich etwas bedenklich :-)
lordpeng
Moderator
Moderator
 
Beiträge: 10183
Registriert: Mo 23 Jun, 2003 22:45

Beitragvon Lapi » Mo 02 Feb, 2004 19:47

das sind ja wieder die übergscheidn!

probier es aus!!

ich will es überschreiben jedoch geht es nicht! da beim überschreiben nicht der alte text gelöscht wird und dan neu geschrieben wird sondern er string für string überschrieben ... und wen zuerst in der datei asdf drinsteht und sie mit ölk überschrieben wird steht in der datei ölkf!!!

und genau das hab ich oben auch schonmal erklärt also nicht immer gleich so gscheid deppad reden sondern zerst amal lesen!

und dein vorschlag geht genauso wenig wie der vorige!
Lapi
Neu im Board
Neu im Board
 
Beiträge: 5
Registriert: Fr 30 Jan, 2004 18:45

Beitragvon lordpeng » Mo 02 Feb, 2004 19:54

>das sind ja wieder die übergscheidn!
mein posting sollte auch keine lösung für dich sein sondern ein hinweis an den eligno sein

vielleicht schaust dir an wie du regular expressions in php verwenden kannst, das dürfte der schnellste weg zum ziel sein
lordpeng
Moderator
Moderator
 
Beiträge: 10183
Registriert: Mo 23 Jun, 2003 22:45

Beitragvon martin » Mo 02 Feb, 2004 20:19

löschen kannst du eine datei mit der funktion unlink, siehe http://at2.php.net/manual/de/function.unlink.php

wenn du dann die datei mit fopen einfach wieder öffnest, wird sie neu angelegt.
martin
Moderator
Moderator
 
Beiträge: 1577
Registriert: Mo 23 Jun, 2003 16:56
Wohnort: Kremsmünster

Beitragvon eLgino » Mo 02 Feb, 2004 22:50

bla, check dir mal deinen super command schreibt dir "" in die file, ein system sollte man verstehen nicht die commands auswendig wissn, das sind immer die obergscheiden die glauben sie san was besseres weils vielleicht ein dummes lenox os rennen haben.

is doch egal wieviele commands man verwendet sauber und richtig sollte es sein.

lern *richtige* shell prog. dann reden wir weiter, STFU!
eLgino
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 74
Registriert: Fr 11 Jul, 2003 12:53
Wohnort: Wien-Meidling

Beitragvon radditz » Di 03 Feb, 2004 14:13

Die Datei leeren kannst du ganz einfach (wie wäre es wenn man sich einfach mal die Funktion fopen ankuckt)

$fp = fopen("datei.txt", "w");
fclose($fp);

Die Datei ist nun leer und das funzt auf jeden System. Gegebenfalls unter Unix/Linux die chmods des Ordners und der Datei auf 666 oder 777 setzen.
Telematica DSL Solo Pro 30 Mbit/s
Vorher: A1 VDSL 16 Mbit/s
radditz
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4399
Registriert: Mo 23 Jun, 2003 16:50

Beitragvon Lapi » Di 03 Feb, 2004 14:28

elgino ... meinst du mich?? ... namen währen eine gute hilfe um verständlich zu machen wen du meinst.

radditz ... ich habs schon gelöst thx

martin ... wen du dir den code ansiehst wirst du merken das ich unlink bereits verwende

mfg lapi
Lapi
Neu im Board
Neu im Board
 
Beiträge: 5
Registriert: Fr 30 Jan, 2004 18:45

Beitragvon lordpeng » Di 03 Feb, 2004 15:02

> das sind immer die obergscheiden die glauben sie san was besseres
> weils vielleicht ein dummes lenox os rennen haben

warum gleich so aggressiv? war ja nur a vorschlag, deshalb brauchst dich ned angegriffen fühlen ... btw. exec("echo \"\"> bla.txt") innerhalb eines PHP scripts schreibt sicher nicht "" in die datei, sondern es erstellt bzw. überschreibt die datei bla.txt mit einer leeren ... wennst aber echo \"\" > bla.txt auf der shell ausführst machts dir klarerweise schon "" in die datei ...
lordpeng
Moderator
Moderator
 
Beiträge: 10183
Registriert: Mo 23 Jun, 2003 22:45

Beitragvon radditz » Di 03 Feb, 2004 16:48

ach noch ein Tipp.
Wenn du die datei mit r+ öffnest, kanns ja net funktionieren, weil du den Inhalt einfach nur überschreibst...

wenn ich dich richitg verstanden habe, willst du einfach anhängen, das geht mit den Modi "a".

sobald du die datei mit "w" öffnest, löscht du den Inhalt.
w+ müsste genauso funzen, aber bin mir nicht sicher.

rewind setzt den dateizeiger auf den Anfang (das gleiche wie mit "r", nur dass "r+" eben auch schreiben erlaubt).
Du kannst auch folgendes machen:
fwrite($fp, $userip ." ");

dann überschreibt der die anderen Zeichen mit Leerzeichen.
Telematica DSL Solo Pro 30 Mbit/s
Vorher: A1 VDSL 16 Mbit/s
radditz
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4399
Registriert: Mo 23 Jun, 2003 16:50

Beitragvon Lapi » Fr 06 Feb, 2004 07:09

radditz ... du hast mich falsch verstanden ... ich will ja kein protokoll machen! ich will den inhalt der datei einfach leeren! was ich auch schon gelöst habe!

danke für all eure antworten aber bitte schaut die fragestellung etwas genauer durch beim nächsten thread den ihr beantwortet.

mfg lapi
Lapi
Neu im Board
Neu im Board
 
Beiträge: 5
Registriert: Fr 30 Jan, 2004 18:45


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste