Alain: text in *.log datei suchen

Moin, sorry dass ich nochmal frage,aber ich kriegs einfach nicht hin nach x-stunden seufz. Also um einfach wie möglich zu fragen: Wie kann ich in einer logdatei nach einem bestimmten text suchen durch ein cgi? oder wie heisst die variable dafür eine log.datei öffnen und nach if(/$etwas/) zu suchen? Für einen kleinen tip oder link wär ich dankbar.

Grüsse vom Alain-- P.S.:Diesmal ohne werbung :)

  1. Hallo Lain!

    Wie kann ich in einer logdatei nach einem bestimmten text suchen durch ein cgi?

    Was für ein CGI? Meinst du ein in Perl geschriebenes?
    Dann findest du hier Hilfe: http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm

    Gruss Sven

    1. Moin,

      Was für ein CGI? Meinst du ein in Perl geschriebenes?

      ja

      Den link kannte ich schon,das Problem ist nicht das suchen selbst sondern suchen in einer text datei oder in einer datei.log. Z.B.

      #!/usr/bin/perl -w print "Content-type: text/html\n\n";

      $logfile = "stat.log"; $username = $ENV{'REMOTE_USER'} || 'anyuser';

      open(LOG,">$logfile") || die "sorry $!";

      if ($username){              print LOG "username\n";             }else  {  print "sorry nicht gefunden\n";  } close (LOG);

      das geht aber nicht...weil if ($username) sich aufs cgi bezieht und nicht im log danach sucht.

      Grüsse vom Alain

      --
      ...nobody is perfect I am nobody
      1. Hi,

        das geht aber nicht...weil if ($username) sich aufs cgi bezieht und nicht
        im log danach sucht.

        Kein Wunder, du durchstuchst ja auch gar nichts, lies nochmal das hier genau! http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#open. Dann weißt du hoffentlich was du falsch gemacht hast, so überprüfst du jedenfalls nur ob die variable username true ist oder nicht. Warum gibst du danach etwas in die Datei aus? Das macht doch keinen Sinn.

        verwunderte Grüße Andres Freund

        1. Moin,

          Kein Wunder, du durchstuchst ja auch gar nichts, lies nochmal das hier genau! http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#open. Dann weißt du hoffentlich was du falsch gemacht hast, so überprüfst du jedenfalls nur ob die variable username true ist oder nicht. Warum gibst du danach etwas in die Datei aus? Das macht doch keinen Sinn.

          es geht darum zu suchen in der logdatei ob der eintrag soundso bereits voranden ist, wenn ja dann passiert nix wenn nein dann dann schreibe den eintrag in die log datei. Damit will ich verhindern dass sich eine selbst erstellte statistik-logdatei unnötig mit doppelten einträgen füllt, das ist alles. Naja ich werd mich mal mit Deinem link schlauer versuchen.

          Grüsse vom Alain

          1. hallo, ok hier hab ich nun eine vorgabe die halbwegs funtzt:

            open(FILE,"$logfile") || die "error $_";

            while (<FILE>){

            if ($username,$ip_now){ #welchen Vergleichs ^^ operator müsste man hier nehmen?

            print "$username,$ip_now Already Exists\n";      close FILE;      exit;          } } $ips = "$date,$username,$ip_now,$agent,$ref";

            &log;  &redir;


            aber leider gehts nicht wenn ich z.B. mit einer anderen IP aufs skript komm. Ich möchte,wenn sich etwas an der $ip_now,$username ändert,dass die log gedruckt wird Beispiel der ausgabe vom cgi ist unter http://www.legfan.de/member/reftest.cgi zu finden.

            Grüsse vom Alain

            1. hallo, ich wollte nun mal meine lösung zeigen,es geht so aber wer weiss,ob der code so sauber ist:

              $logfile ="stat.log";

              $date = "$hour:$min:$sec $mday/$month";

              $username = $ENV{'REMOTE_USER'} || 'anyuser';

              $ip_now         = $ENV{'REMOTE_ADDR'};

              $agent =  $ENV{'HTTP_USER_AGENT'};

              $ref =  $ENV{'HTTP_REFERER'} || 'none';

              $ips = "$username,$ip_now,$date,$agent,$ref";

              Now that we know what the time/date is.. let's have fun

              open(FILE,"<$logfile"); $Zugriffe = 0;

              while (<FILE>){      /$username,$ip_now/ ? $Zugriffe = $Zugriffe + 1 : $Zugriffe = $Zugriffe;{      print "Content-type: text/html\n\n";      print "sorry\n";      } }

              if ($Zugriffe < 1)   {  &log; }

              close (FILE);

              &redir;

              sub log {

              if (! open(LOG,">>$logfile")) {

              print "Content-type: text/html\n\n";

              print "Cannot open file\n";

              exit;                         }

              {

              print LOG "$ips\n"; print LOG "------- \n"; close (LOG); }}

              sub redir {

              print "Location: $HomeDirURL\n\n";                                      exit;

              } exit;

              wäre froh wenn ein profie dieses sript mal in augenschein nehmen würde und mir die fehler zeigt falls vorhanden :) Grüsse vom Alain

  2. Hi,

    sorry dass ich nochmal frage,aber ich kriegs einfach nicht hin nach x-stunden *seufz*.
    Also um einfach wie möglich zu fragen:
    Wie kann ich in einer logdatei nach einem bestimmten text suchen durch ein cgi?
    oder wie heisst die variable dafür eine log.datei öffnen und nach
    if(/$etwas/) zu suchen?
    Für einen kleinen tip oder link wär ich dankbar. http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htmund http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#open, da findest du schon einmal viel, falls du mit "einem CGI" ein Perl-Script meinst. Dus musst du die Logsatei nur  mittels open() öffnen, und den Inhalt durch einen Regex/mehrere Regexe überprüfen. Wo ist da das Problem?

    mfg Andres Freund

    1. Hi,

      Tut mir leid, ich habe ausversehen aauf versenden statt auf Vorschau geklickt.

      Wie kann ich in einer logdatei nach einem bestimmten text suchen durch ein cgi?
      oder wie heisst die variable dafür eine log.datei öffnen und nach
      if(/$etwas/) zu suchen?
      Für einen kleinen tip oder link wär ich dankbar.

      Siehe http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htmund http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#open, da findest du schon einmal viel, falls du mit "einem CGI" ein Perl-Script meinst. Dus musst du die Logsatei nur  mittels open() öffnen, und den Inhalt durch einen Regex/mehrere Regexe überprüfen. Wo ist da das Problem?

      mfg Andres Freund