Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Besucherzhler - irgendwo werden Umbrche eingefgt

  1. #1
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beitrge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Besucherzhler - irgendwo werden Umbrche eingefgt

    Guten Mittag.

    Ich habe in PHP einen Besucherzhler geschreiben, und wenn eine IP in den letzten 30 Minuten schon da war, wird eine Zahl angehoben, das ganze jedoch nicht als neuer Besuch gewertet.
    Nun gibt es aber ein Problem: vor dem neuen Eintrag wird immer ein Zeilenumbruch eingefgt. Ich habe stundenlang ber dem Code gebrtet und die Stelle nicht gefunden.
    Knnt ihr mir helfen?
    Code:
    <?
    // datum, zeit und ip herausfinden
    $IP = $_SERVER&#91;'REMOTE_ADDR'&#93;;
    $datei = file&#40;"pfad"&#41;;
    $timestamp = time&#40;&#41;;
    $d2 = $datei&#91;2&#93;; // hier steht, wie viele Eintrge da sind
    $min = &#40;date&#40;"H",$timestamp&#41; * 60 + &#40;date&#40;"i",$timestamp&#41;&#41;&#41;;
    $day = date&#40;"Y",$timestamp&#41;;
    $datum = date&#40;"Y.m.d",$timestamp&#41;;
    $i = $d2 + 3; // hinterste Zeile
    $b = 0; //speichert, ob die IP gefunden wurde
    $zwischen = array&#40;&#41;;
    do
    &#123;
    	$i--;
    	$zwischen = explode&#40;"|",$datei&#91;$i&#93;&#41;;
    	if&#40;!&#40;$i > 0 && $zwischen&#91;0&#93; == $datum && $min - $zwischen&#91;1&#93; <= 30 &#41;&#41; &#123;break;&#125; //Abbruch wenn Eintrag von Gestern oder mehr als 30minuten her
    	if&#40;$zwischen&#91;2&#93; == $IP&#41;
    	&#123;
    		$b = 1;
    	&#125;
    &#125;
    while&#40;$b == 0&#41;; //wird versucht ip bereinstimmung zu finden
    if&#40;$b == 1&#41; //bei IP-bereinstimmung
    &#123;
    	$zeile = $zwischen&#91;0&#93; . "|" . $min . "|" . $zwischen&#91;2&#93; . "|" . &#40;$zwischen&#91;3&#93; + 1&#41; . "|" . $zwischen&#91;4&#93;;
    //neue Uhrzeit wird eingefgt sowie der Zhler um eins erhht
    	$datei&#91;$i&#93; = $zeile;
    	$datei&#91;$d2 + 3&#93; = "*/";
    	$datei&#91;$d2 + 4&#93; = "?>";
    	$datei&#91;2&#93; = $d2;
    	$datei&#91;0&#93; = "<?";
    	$datei&#91;1&#93; = "/*";
    &#125;
    else //ohne bereinstimmung
    &#123;
    // neuer Eintrag wird generiert
    	$zwischen = array&#40;$datum,$min,$IP,1&#41;;
    	$zeile = $datum . "|" . $min . "|" . $IP . "|" . 1 . "|" . $min;
    	$datei&#91;$d2 + 3&#93; = $zeile;
    	$datei&#91;$d2 + 4&#93; = "*/";
    	$datei&#91;$d2 + 5&#93; = "?>";
    	$datei&#91;2&#93; = $d2 + 1;
    	$datei&#91;0&#93; = "<?";
    	$datei&#91;1&#93; = "/*";
    &#125;
    $datei3 = "";
    //Array wird bernommen
    for&#40;$i = 0; $i < $d2+6; $i++&#41;
    &#123;
    	$datei3 .= $datei&#91;$i&#93;."\n";
    &#125;
    // Eintragung in die Datei
    $datei2 = fopen&#40;"pfad","w"&#41;;
    fwrite&#40;$datei2,$datei3&#41;;
    fclose&#40;$datei2&#41;;
    ?>
    Ich finde die Stelle einfach nicht, wo der zustzliche Umbruch eingeschleust wird.

    Findet jemand den Fehler?

    Ich wrde mich sehr ber Hilfe freuen, da blickt man ja nicht sofort durch.

    Danke im Voraus
    The User
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist lter als 90 Tage. Die darin enthaltenen Informationen sind mglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Knig(in)
    Registriert seit
    06.06.2007
    Ort
    Bi
    Beitrge
    1.015
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Kleiner Rat : Kommentiere das nchste mal das Script durch, durch diese kurzen Variabeln kann sich ja keiner mehr durchfinden.

    Mein Tipp liegt in disem Codebereich:
    for($i = 0; $i < $d2+6; $i++)
    {
    $datei3 .= $datei[$i]."\n";
    }
    versuch doch mal das umzubauen:
    for($i = 0; $i < $d2+6; $i++)
    {
    if($datei[$i] != "")
    $datei3 .= $datei[$i]."\n";
    }
    oder so und dann nochmal auszuprobieren
    Smtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausfhrbarkeit und ist fr die Implementation auerhalb der Beispiele nicht geeignet.

    Kein Support fr kommerzielle Scripts | Kein kostenloser Support via ICQ

  3. #3
    phpfan
    Gast

    Standard

    Was mich interessieren wrde, wre der genaue Aufbau der Datei. Im Moment wrde ich mal behaupten, dass das Script viel zu kompliziert aufgebaut ist und man das locker vereinfachen knnte. Da man aber weder die Datei kennt, noch bei den Variablen wirklich auf die Schnelle durch den Quellcode steigt, habe ich keine Lust, mir da mehr Gedanken darber zu machen.

  4. #4
    Forum Guru
    Themenstarter
    Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beitrge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Das klappt leider nicht.
    Selbst wenn ich das Extremmittel ereg_replace("\n","",$datei[$i]); in die for-Schleife einfge.

    Ich werde verckt!

    The User

  5. #5
    phpfan
    Gast

    Standard

    Jau, mit Kanonen auf Spatzen schieen. Wozu ereg_replace und nicht trim? Und bitte mein Posting von13:21 Uhr beachten.

  6. #6
    Forum Guru
    Themenstarter
    Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beitrge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Die Datei?
    <?
    /*
    zahl der eintrge
    datum|minute|ip|startminute
    ...
    */
    ?>

    Viele liebe Gre
    The User

  7. #7
    phpfan
    Gast

    Standard

    Frage: Was sollen die<?, /* */ und ?> in der Datei? Warum arbeitest du nicht einfach mit Timestamps?

    Anzahl
    ip|timestamp
    ip|timestamp
    ip|timestamp
    ip|timestamp
    ip|timestamp
    ip|timestamp

  8. #8
    Forum Guru
    Themenstarter
    Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beitrge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Die sind nur, damit mans nicht einfach so auslesen kann.
    Mit trim werden immer noch die Umbrche eingefgt.

    Aber der Fehler muss frhestens bei der for-Schleife liegen.
    Ich hab mir mal die Arrays ausgeben lassen.

    Es klappt wirklich alles, es kommen nur immer diese Umbrche.

    Viele liebe Gre
    The User

  9. #9
    phpfan
    Gast

    Standard

    Zitat Zitat von The User
    Die sind nur, damit mans nicht einfach so auslesen kann.
    Was wre daran so dramatisch, wenn man so eine Datei auslesen knnte? Man kann diese Datei auch einfach in einen geschtzen Bereich ablegen und gut ist.
    Auf die Schnelle zusammengebastelt und ungetestet:
    Code:
    <?php
       $ip = $_SERVER&#91;'REMOTE_ADDR'&#93;; 
       
       $filename = "counter.txt";
       
       $new_data = array&#40;&#41;;
       
       if &#40;file_exists&#40;$filename&#41;&#41;
       &#123;
          $data = file&#40;$filename&#41;;
       
          $count = trim&#40;array_shift&#40;$data&#41;&#41;;
    
          $new_data = array&#40;&#41;;
          
          $ip_found = false;
    
          foreach &#40;$data as $line&#41;
          &#123;
             $line = trim&#40;$line&#41;;
             
             $values = explode&#40;"|", $line&#41;;
          
             if &#40;$values&#91;0&#93; == $ip&#41;
             &#123;
                $ip_found = true;
                
                if &#40;$values&#91;1&#93; < time&#40;&#41; - 1800&#41;
                   $count++;
    
                $values&#91;1&#93;= time&#40;&#41;;
             
                $line = implode&#40;"|", $values&#41;;
             &#125;
          
             $new_data&#91;&#93; = $line;
          &#125;
          
          if &#40;! $ip_found&#41;
          &#123;
             $new_data&#91;&#93; = $ip . "|" . time&#40;&#41;;
             $count++;
          &#125;
             
          array_unshift&#40;$new_data, $count&#41;;
        &#125;
        else
        &#123;
           $new_data = array&#40;1, $ip . "|" . time&#40;&#41;&#41;;
        &#125;    
        
        $fp = @fopen&#40;$filename, "w"&#41;;
        
        if &#40;$fp&#41;
        &#123;
           fputs &#40;$fp, implode&#40;"\n", $new_data&#41;&#41;;
             
           fclose&#40;$fp&#41;;
        &#125;
        else
          echo "Datei konnte nicht zum Schreiben geffnet werden";
    ?>

  10. #10
    Forum Guru
    Themenstarter
    Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beitrge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Joah, das hat was!

    Klappt.
    Wie schtze ich eigentlich ein Verzeichnis ohne htaccess.
    Wenn ich googel find ich nur mit.

    Danke
    The User

hnliche Themen

  1. CSS Men, da is irgendwo der Wurm. Nur wo?
    Von Mlla im Forum HTML & CSS Forum
    Antworten: 22
    Letzter Beitrag: 17.02.2006, 07:36
  2. irgendwo kommt ne lcke her
    Von don-golione im Forum HTML & CSS Forum
    Antworten: 4
    Letzter Beitrag: 04.11.2005, 23:22
  3. Bilder werden von Style XP nicht eingefgt..
    Von biberschwester im Forum Computer - Internet Forum
    Antworten: 1
    Letzter Beitrag: 09.04.2005, 13:30
  4. Popup, irgendwo steckt der Wurm in meinem Script
    Von Vincent im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 9
    Letzter Beitrag: 02.11.2004, 17:48
  5. Irgendwo auf einer Insel im Ozean
    Von umbenannt im Forum Das Forum fr Spiele, Fun & Jokes
    Antworten: 0
    Letzter Beitrag: 29.03.2003, 21:01

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •