Avatar billede stefmeister Nybegynder
30. september 2004 - 00:21 Der er 5 kommentarer og
1 løsning

ip.log

Hej

Jeg har lavet en lille fil på min server som hedder ip.log, som logger dem der har logget ind på min side, men der kan kun stå to af gangen, så hvis en ny logger ind, så bliver den nederste bare slettet, så jeg kan kun se den første og den seneste. Kan man ikke gøre det på andre måder?
Kunne selvfølgelig lave en database der indeholdte de informationer, men vil hellere have det i en fil.

Her er min kode:

        if(file_exists("ip.log"))
            {
                  $exist_file = fopen("ip.log", "r");
                  $text = fgets($exist_file, 255);
                  $text = $text."\n".$_SESSION[brugernavn]." - ".$REMOTE_ADDR." - ".$tid;
                  fclose($exist_file);
                  $exist_count = fopen("ip.log", "w");
                  fputs($exist_count, $text);
                  fclose($exist_count);
            } else {

                $new_file = fopen("ip.log", "w");
                fputs($new_file, $_SESSION[brugernavn]." - ".$REMOTE_ADDR." - ".$tid);
                fclose($new_file);
            }
Avatar billede detox Nybegynder
30. september 2004 - 00:28 #1
Prøv:

        if(file_exists("ip.log"))
            {
                  $exist_file = fopen("ip.log", "a");
                  $text = $_SESSION['brugernavn']." - ".$_SERVER['REMOTE_ADDR']." - ".$tid."\n";
                  fputs($exist_file, $text);
                  fclose($exist_file);
            } else {
                $new_file = fopen("ip.log", "w");
                fputs($new_file, $_SESSION['brugernavn']." - ".$_SERVER['REMOTE_ADDR']." - ".$tid);
                fclose($new_file);
            }
Avatar billede detox Nybegynder
30. september 2004 - 00:32 #2
Eller lidt enklere:

        if(!file_exists("ip.log")) touch("ip.log");
        $exist_file = fopen("ip.log", "a");
        $text = $_SESSION['brugernavn']." - ".$_SERVER['REMOTE_ADDR']." - ".$tid."\n";
        fputs($exist_file, $text);
Avatar billede coderdk Praktikant
30. september 2004 - 00:52 #3
Ikke nødvendigt at checke om den eksisterer, bare brug

  $exist_file = fopen("ip.log", "a");

Hvis den ikke findes, så oprettes den!
Den pæne løsning vil være:

  $fh = fopen( "ip.log", "a" );
  flock( $fh, LOCK_EX );
  fwrite( $fh, $_SESSION['brugernavn'] . " - " . $_SERVER['REMOTE_ADDR'] . " - " . $tid );
  flock( $fh, LOCK_UN );
  fclose( $fh );

Så låses filen ikke; så risikerer du ikke at miste data hvis to samtidige brugere tilgår den ;)
Avatar billede coderdk Praktikant
30. september 2004 - 00:53 #4
For at være pedantisk:

  $fh = fopen( "ip.log", "a" );
  if ( flock( $fh, LOCK_EX ) )
  {
    fwrite( $fh, $_SESSION['brugernavn'] . " - " . $_SERVER['REMOTE_ADDR'] . " - " . $tid );
    flock( $fh, LOCK_UN );
  }
  fclose( $fh );
Avatar billede stefmeister Nybegynder
30. september 2004 - 16:38 #5
coderdk -> Det virker rigtig godt, det er også fint at filen ikke låses, for så risikere jeg ikke det med hvis der er to på samme tid. :D
Avatar billede coderdk Praktikant
30. september 2004 - 16:46 #6
Nej, den skal skam låses :) Ellers risikerer du at du mister alle data i den ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester