[php] ip-log, und time-log

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

[php] ip-log, und time-log

Beitrag von Sincer »

ho ;)

hoffe, ich bin hier richtig...

ich arbeite gerade an meiner seite - bessergesagt, an einer internen seite, und ich will meinen eigenen loginbereich schreiben...
eineiges habe ich ja jetzt shcon, aber ein paar sachen schaffe ich einfach nicht...

Also ich bin ein totaler php neuling, also bin ich für alle vorschläge offen! - wenn jem das problem ganz anders lösen würde als ich, aber das ergebnis das gleiche, oder ein besseres wäre, wäre ich vollkommen damit einverstanden...

ich würde gerne als erstes einen ip log machen...

Code: Alles auswählen

<?php
$einloggen = fopen("online.txt", "a+");
$iplog = $_SERVER['REMOTE_ADDR'];
while (!feof($einloggen)){
  $iplogok = fputs($einloggen, $iplog);
}
fclose($iplog);
?>

der hintergrundgedanke: die ip soll in ne datei (online.txt) geschrieben werden... (später dann soll das beim login passieren)
bei der anmeldung wird dann (der code ist noch nicht dabei) diese online.txt geöffnet, und nachgesehen, ob die ip in der liste steht...
warum ich das mache? ich habe vor die interne seite einfach in meineinterneseite.at/intern zu geben... wenn man aber den link so eingibt, passt ja die ip übereinstimmung in der online.txt nicht, weil man sich ja nicht eingeloggt hat, und damit die ip nicht in der liste steht :P
*quer denk* - das scheint vil. jetzt ein wenig unnötig, aber ich habe mir das so überlegt, und will das so machen :P

das zweite wäre eine art "autolöschung des ip-logs" *g*
ich weiß, das klingt jetzt noch unsinniger, als das von vorher *g*, aber...ich will das so machen...

dazu habe ich diesen code zusammengebastelt... aber mir ist selber klar das das vorn und hinten einfach nciht funktionieren kann...

diesmal habe ich ihn kommentiert, und er sollte sich selber erklären (dafür bräuchte ich unbedingt ne andere lösung!!:

Code: Alles auswählen

<?php
// zeit bekommen... (wird dann beim login-knopf betätigen aktivirt oder beim betreten der seite)
$newTime = date("t");
// zeit in timer.txt datei schreiben...
$timerRun = fopen("timer.txt", "a+");
// wenn in der timer.txt größergleich 3 stunden ist...
if ($timerRun >= $timerRun + 1 && $timerRun <= 31) {
  // vernichtet den inhalt der login.txt (wo die ip's drinnen stehen)
  $ipdel = fopen("login.txt", "r");
  fclose($ipdel);
  // nun schreibe die aktuelle zeit in die timer.txt
  $writeTimer = fwrite($timerRun, $newTime);
  fclose($timerRun);
}
// wenn noch keine 3 h vergangen sind, ist keine aktion nötig...
// es ist klar, dass für das erste mal eine timer.txt datei angelegt werden muss,
// in der 0 steht, sonst würde das script nie triggern :P
// dannach sollte es sich von alleine immer selbst am laufen halten...
?>
das problem ist, wenn sich jem. das letzte mal um 23 uhr einloggt, und dann jem. das nächste mal um 8 in der früh, ist 8 kleiner als 23, und damit wird die ip liste nicht gelöscht...


ich hoffe ich habe meine probleme gut genug beschireben, so dass ihr mir helfen könnt :)

wie gesagt: ich bin für jeden tipp und lösungsvorschlag dankbar ;)

thx
Sincer
Zuletzt geändert von Sincer am 04.01.2008 09:37, insgesamt 1-mal geändert.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Der von Dir gewählte Titel bezieht sich nicht auf Deine Frage.
Man sollte immer bedenken, dass Suchergebnisse mit derartigen Titeln einem selbst nicht weiterhelfen.

Bitte passe deinen Beitrag an, lies Dir den phpBB.de-Knigge durch und beachte diese zukünftig.
progger
Mitglied
Beiträge: 21
Registriert: 21.05.2007 21:14
Kontaktdaten:

Beitrag von progger »

1) Wie schon mein Vorredner gesagt hast, ist der Titel des Topics total scheisse und wird nicht gerade viele ermutigen dir zu helfen -.-

2) Sieht man einen seehr sturköpfigen Mensch vor sich, wenn man dein Posting ließt. :o

3) Ziehmlich viel Text für dieses (wenn ich das jetzt richtig verstanden habe) Mini-Problem

4) Dein Vorgehen mit dem IP-Login ist völlig unpraktisch, zu aufwendig, unflexibel und was weiß ich... Das scheinst du selber zu wissen und willst es anscheinen trotzdem so machen... :roll:

5) Speichere doch anstatt der aktuellen Stunde einige richtige Zeit ab einem Fixdatum. Die kriegst du per time().
So das sollte als Hilfe reichen. Jetzt musst du googlen, oder es anders machen (wozu dich dir rate.)
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag von Sincer »

:(

1) das mit dem knigge verstoß - hab die knigge gelesen, aber das mit dem titel da etwas schleißig angesehen - sry deswegen mal...
(hab es jetzt geändert!)

2) bin ich nicht stur ... wenn ich stur wäre müsste ich etwas mehr von php verstehen, um auf meinen code zu beharren
(ich glaube, ich habe erwähnt, dass ich für jeden hinweis dankbar bin, und wenn es eine total änderung wäre, die besser funktioniert (oder überhaupt funktioniert *g*) wäre ich auch damit einverstanden!)

3) kann ich mich nicht erinnern gesagt zu haben, dass mein problem ein kleines sei... vil. habe ich einfach nur gedächtnis verlust, oder ich habe mich irgendwo nicht deutlich genug ausgedrückt, aber, wie gesagt, kanns zumindest jetzt nicht finden ( und habs sicher nicht wegeditiert - nur den titel geändert)... jo, ka, warum du das sagst, aber ok ;)
(sry, wenn ich dich mit meinen vielen worten verschreckt habe :( )

4)
4) Dein Vorgehen mit dem IP-Login ist völlig unpraktisch, zu aufwendig, unflexibel und was weiß ich... Das scheinst du selber zu wissen und willst es anscheinen trotzdem so machen...
ok, ... dann wäre ich jetzt echt für nen anderen vorschlag dankbar... wie gesagt, ich bin echt nicht gut in sowas, und das sollte meine erste seite werden - und damit auch mein erster einloggbereich...
-> NEED HELP!!

5) das mit der time gibt doch das gleiche problem, ich hatte das anfangs so, aber das hat die sache nur unnötig erschwert... (ich hatte es mit date... obwohl, wenn ich es mit datum und jahr rein schreibe, müsste das weiterhelfen...)... danke auf jeden fall für den tipp, ich schau mir das mal genauer durch ;)
und zu dem googlen... so ist mein erster teil überhaupt entstanden...deswegen schaut er auch so mies aus, wie er ist *g*


so...ich hoffe, ich habe alles klargestellt ...

in deisem sinne bitte ich euch nochmal um hilfe :)

thx
Sincer
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Eine Frage:
Warum Arbeitest du mit Dateien(online.txt, timer.txt)? :roll:
Verwende eine Datenbank z.B. mySQL

Auf die Schnelle habe ich ein Tutorial gefunden was dir sicherlich helfen wird:
http://tut.php-quake.net/login.html

PS: Wenn dir etwas im Tutorial unklar ist, überfliege die vorherigen Tutorials und irgendwann triffst du bestimmt auf den Teil der deine Unklarheit beseitigt.

@progger
Dein Posting war sehr informativ.
:wink:
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag von Sincer »

hey, cool, danke ;)

ich lese mir das eben mal durch...
(von mysql verstehe ich zwar noch weniger, als von php *g*, aber ich denke, dass wird schon gut erklärt sein ;)

ich poste dann einfach wieder, wenn ich eine frage habe :)

thx auf jeden fall ;)
Sincer

//EDIT: jo, sry, ich blick da voll nciht durch, und kenne mich wirklich nicht mit mysql aus :(

ist es denn ein starkes problem, wenn ich die ip in einer txt datei speichere, und diese auslesen will?

Link ist auf jeden fall unter den favouriten - vil. kann ich mir ja den einen oder anderen schnipsel davon abschneiden :P
Zuletzt geändert von Sincer am 04.01.2008 11:49, insgesamt 1-mal geändert.
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Ich habe deinen Code mal etwas angeschaut:

Code: Alles auswählen

if ($timerRun >= $timerRun + 1 && $timerRun <= 31)
Der Code wir NIE ausgeführt. Nehmen wir mal an timerRun = 5
Dann schaut man sich die Bedingung an:

Code: Alles auswählen

$timerRun >= $timerRun + 1 && $timerRun <= 31
= 5 >= 5 + 1 && 5 <= 31
= 5 >= 6 UND 5 <= 31
= FALSE UND TRUE
= FALSE
Dann der Kommentar davor:

Code: Alles auswählen

// wenn in der timer.txt größergleich 3 stunden ist...
Wo prüfst du da irgendwo auf 3 Stunden?

Du öffnest timer.txt außerhalb von einer Bedingung.
Du schließt ihn aber innerhalb von einer Bedingung, das bedeutet also wenn die Bedingung nicht zutrifft bleibt die Datei geöffnet.


Noch was:
Arbeite an deinem Stil, je übersichtlicher du schreibst, um so mehr überblick hast du und wenn du fragen hast kann dir ein anderer auch besser helfen, weil er sofort weis was zusammen gehört:

Ich finde es so viel übersichtlicher, aber das ist letztendlich jedem selbst überlassen:

Code: Alles auswählen

<?php

// zeit bekommen... (wird dann beim login-knopf betätigen aktivirt oder beim betreten der seite)

$newTime = date("t");

// zeit in timer.txt datei schreiben...

$timerRun = fopen("timer.txt", "a+");

//wenn in der timer.txt größergleich 3 stunden ist...

if ($timerRun >= $timerRun + 1 && $timerRun <= 31)
{

    // vernichtet den inhalt der login.txt (wo die ip's drinnen stehen)

    $ipdel = fopen("login.txt", "r");
    fclose($ipdel);

    // nun schreibe die aktuelle zeit in die timer.txt

    $writeTimer = fwrite($timerRun, $newTime);
    fclose($timerRun);
}

/**
* wenn noch keine 3 h vergangen sind, ist keine aktion nötig...
* es ist klar, dass für das erste mal eine timer.txt datei angelegt werden muss,
* in der 0 steht, sonst würde das script nie triggern :P
* dannach sollte es sich von alleine immer selbst am laufen halten...
**/

?>
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag von Sincer »

1) nochmal danke ;)

2) das mit dem kommentar war mein fehler ( ich hatte das script schon ein paar mal überarbeitet... es waren einmal 3 h, dann waren es 1h, und dann habe ich es auf einen tag geändert... - deswegen stimmte der kommentar nciht mehr, den ihc vergesen hatte, auszubessern^^)

3) das mit dem ausführen - du hast recht, aber wie mache ich das dann, dass er ausgeführt wird?
ich habe das schon mit dem tipp von der ganzen time gelesen...

also rein theorethisch: wenn ich sage, ich speichere dei ganze zeit (also h:m:s, und datum ab in ne txt) und dann will ich checken, ob schon (mindestens) 3 h vergangen sind, damit die ip-log txt gelöscht werden kann...
wie kann ich das machen? davon habe ich nämlich keinen plan :(

4) das mit dem stil - wie gesagt, bin ich ein totaler newb (zumindest stands im alten topic, das ich verändert habe *g*) also danke für den tipp
ich werde in zukunft mehr platz zwischen den sachen lassen, damit man einen besseren durchblick hat (stimmt aber: deines schaut echt übersichtlicher aus, als meins :P)

5)das mit dem schließen der datei...
dann müsste ich das fclose($timerRun); doch einfach nur hinter die geschlossene klammer setzen, sodass das schließen (ob bedingung nun erfüllt, oder nicht) immer geschlossen wird... stimmt das so?

Code: Alles auswählen

[...]
if ($timerRun >= $timerRun + 1 && $timerRun <= 31)
{

    // vernichtet den inhalt der login.txt (wo die ip's drinnen stehen)

    $ipdel = fopen("login.txt", "r");
    fclose($ipdel);

    // nun schreibe die aktuelle zeit in die timer.txt

    $writeTimer = fwrite($timerRun, $newTime);
}

fclose($timerRun);
thx für die tipps :)
Sincer
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Ja das wird schon besser :D

Zu der Stunden Problematik:

du willst sicherlich das ein user maximal 1 Stunde eingelogt sein muss bevor er sich neu einloggen muss.

Ein Problem was du dabei hast ist folgendes:

Es ist 1 Uhr ---- User A logt sich ein in der Datei wird 1 gespeichert.
Es ist 1:55 Uhr- User B logt sich ein in der Datei wird nichts geändert
Es ist 2 Uhr ---- User B ruft eine eine von deinen Seiten ein Die Bedingung mit der einen Stunde greift User B muss sich neu einloggen, obwohl er nur 5 Minuten eingeloggt war.

Das ist blöd.

Wenn du nun auf Datenbanken umschwenkst kannst du einzeln festhalten wann die User neu eingeloggt sein sollen, aber am besten ist es halt wenn du dir erstmal das Tutorial in Ruhe durchliest.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Sincer
Mitglied
Beiträge: 26
Registriert: 03.01.2008 19:25

Beitrag von Sincer »

a, ja klar, verstehe, das ist sch***^^

ok, und was ist, wenn ich das problem etwas unproffessioneller löse...

zb. der log wird immer um 5 uhr in der früh, dann um 10, dann um 15, dann 20, und zu letzt um 24/00 uhr gelöscht, egal wann man sich einloggt...
dann kann das zwar auch passieren, dass man gleich wieder fliegt, wenn man sich zu einer besch*** zeit eingeoggt hat, aber ... wenn ich es jetzt so löse, dass der ip log nur zu ungewöhlichen zeiten lösche...(dann ist es zwar nicht soo oft, aber für mich würde das durchaus noch reichen...

nehmen wir an, ich mach es so:
löschung des log um 1:00 (wenn da wer on ist, soll er sich doch ncohmal einloggen *g*) dann um 13 (da sollte man mittagessen *g*, und nicht on sein :P)
dann hätte ich 2 mal am tag einen ip-log del... (bzw einmal würde auch reichen (zb nur um 1uhr in der nacht...)

kann ich dem server in nem php script mitteilen, dass egal, ob gerade wer auf der seite ist, oder nicht, er die ip-log um 1 uhr löschen soll?, oder braucht man einen trigger, also jem. der sich einloggt...


aber du hast natürlich recht, das ist besch*** - also das problem, das du geschildert hast...

kann man den ip-log ein oder zwei mal pro tag auto-löschen lassen? ist das mit php möglich? wenn ja, wie?

thx
Sincer

//EDIT: oder... was mir eben eringefallen ist, die zeit mit datum beim ip-log dazuzuschreiben, und dann als array auszulesen, und nur dann zu löschen, wenn die zeit abgelaufen ist - also dann aber nur die eine zeile, in der die zeit mit der ip steht... das ist dabb aber sich sau kompliziert :(
Antworten

Zurück zu „Coding & Technik“