}
[/php]INFO: $filename ist die Logdatei inklusive Pfad…
Also der Counter geht nicht eins höher, sobald jemand die Seite anschaut.
Vielleicht kann ich mich irren, dass es nicht funzt. Ich habe es vorher mit dem Laptop aufgerufen und der Zähler blieb auf 1.
Kann jemand den Fehler finden? (Falls es überhaupt einen gibt)
Also geht dazu noch auf die Seite http://matibaski.paradoxe.de/MyB damit ich sehe, ob es doch funktioniert. Ist aber eigentlich nicht möglich dass der Laptop die gleiche IP wie der PC hat. Nunja, Versuch ists wert.
Es erscheint dieser Fehler:
( http://matibaski.paradoxe.de/MyB/ ) Notice: Undefined variable: _SESSION in /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/_private/mybcounter/counter.php on line 27
Notice: Undefined offset: 1 in /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/_private/mybcounter/counter.php on line 31
Doch was kann das sein?
Ich habe mal session_start(); oben eingeschrieben, doch dann kam dies: Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/index.php:82) in /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/_private/mybcounter/counter.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/index.php:82) in /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/_private/mybcounter/counter.php on line 2
Notice: Undefined index: ip in /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/_private/mybcounter/counter.php on line 28
Notice: Undefined offset: 1 in /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/_private/mybcounter/counter.php on line 32
Ich weiss nicht wieso bei session_start(); die Meldung kommt, dass es den Cookie nicht senden kann… Und vor allem steht, dass bereits eine Session gestartet wurde.
Linie 2:
session_start();
Linie 28:
[php]
if($ip !== $_SESSION[‚ip‘])[/php]
Linie 32:
[php]
$NewCount = $Old[1] + ‚1‘;[/php]
Ich habe mit Sessionen seit langem nicht mehr gearbeitet. Das letzte mal als ich diese aktiv brauche, benutzte ich session_register()… Doch ich hörte hier mal, dass dies abgeschaffen wurde…
du musst session_start() aufrufen, bevor du Text ausgibst. Sonst müsste php das Cookie PHPSESSID für die Session-ID mittem im HTML-Code senden und dann macht der Browser damit ja nicht mehr das, was er soll.
Du kannst auch die Ausgabe mit ob_start() puffern und am Ende vom Script durch ob_end_flush() ausgeben. Soll sogar schneller sein als direkt per echo.
headers already sent
meint das obige, dass das Cookie nicht mehr dem Browser mtigeteilt werden kann.
Habe nun ob_get_contents eingeschrieben, wollte jedoch nicht.
Und ich hab’s auch schon so ausprobiert:
[php]
$ausgabe = „Besucherzähler: $NewCount“;
$_SESSION['ip'] = $ip;
}
$druck = ob_get_contents($ausgabe);
ob_end_flush($druck);
ob_end_clean();[/php]
Ich denke mal, logisch gedacht, dass es gar nicht gehen kann, denn ich habe im Script ja diesen Codeteil:
[php]
if($ip !== $_SESSION[‚ip‘])[/php]
Der Prüft ja nach der Session…
Setzt ob() auch Sessionen? Ich denke nicht
Wie würde das Script aussehen bei der if-Abfrage, da ich ja keine Sessionen benutze?
ob_end_flush() ist schon richtig. Der Befehl beendet das Puffern und gibt den Inhalt aus. Man muss dem Befehl aber keine Parameter übergeben. ob_end_clean() muss nicht mehr aufgerufen werden, da ob_end_flush() den Puffer bereits leert.
@matibaski: Gibst du denn schon Text aus, bevor du das Script einbindest? Wenn ja, dann muss entweder das ob_start() oder das session_start() vor die erste Textausgabe. Wenn du session_start() vor der ersten Textausgabe einbindest brauchste ob_start() nicht mehr. session_start() brauchste aber immer, wenn du mit 'ner Session arbeiten willst.
utput started at /home/httpd/vhosts/paradoxe.de/subdomains/matibaski/httpdocs/MyB/index.php:82) in
Was steht denn bei dir in der index.php in Zeile 82?
edit:
Code umgeändert…
Nun erscheint kein Error mehr, aber auch keine Ausgabe.
Hier ist der vollständige Code:[php]
<?
session_start();
error_reporting(E_ALL);
ob_start(); // OB starten
$filename = "myblog.log"; // Logdatei
gethostbyaddr($_SERVER['REMOTE_ADDR']); // IP holen
$fp = fopen( $filename,"r"); //
$Old = fread($fp, 100); // Alten Counter hervorrufen
fclose( $fp ); //
if($ip !== $_SESSION['ip']) // IP prüfen
{
$Old = split ("=", $Old, 5);
$NewCount = $Old[1] + 1; // Alten Counter erhöhen
$New = "Besucherzähler: $NewCount"; // Ausgabe
$fp = fopen( $filename,"w+"); // Öffnen der Date, zum neuen Stand speichern
if (flock($fp, 2))
{
fwrite($fp, $New, 100);
}
fclose( $fp );
$ausgabe = "Besucherzähler: $NewCount";
$_SESSION['ip'] = $ip;
}
$druck = ob_get_contents();
ob_end_clean();
echo $druck;
?> [/php]
Seht ihr, anhand des Codes, wieso es nicht funktionieren will?
Also ich finde keinen Fehler. PHP Code mässig hat es auch keine, aber irgendein Aufbaufehler.
gethostbyaddr($_SERVER['REMOTE_ADDR']); // IP holenich seh grad, du speicherst die IP garnicht in $ip. Die steht übrigens in $_SERVER[‚REMOTE_ADDR‘], da musste nicht mehr den Host ermitteln.
Zum ob_*, das brauchste nur, wenn du die Session nicht am Anfang vom Script gestartet hast. Dann musste mit ob_start() am Anfang vom Script die Ausgabe puffern.