Zum Inhalt springen

txt - Besucherzähler ???

Erstellt am 29. Dezember 2007 · 2 Antworten · letzte Antwort am 2. Januar 2008

Tags: PHP, Frage

beos ·

Hallo,
ich würde gerne meinen alten (als ich noch ohne Typo3 jede Zeile selbst schrieb) Textfile basierten Besucherzähler in mein HTML-Template einbinden. Die Idee ist das per PHP-Script beim Client ein Cookie gesetzt wird (Reload-Schutz), und gleichzeitig der Zählerstand in einer txt-Datei um 1 erhöht wird. Klappte bei der alten HP auch alles wunderbar, nur die Einbindung ins neue HTML-Template klappt nicht, da Typo3 irgendwie empfindlich ist. Folgende Fehlermeldung erscheint:

Warning: Cannot modify header information - headers already sent by (output started at C:\apache\htdocs\quickstart\index.php:426) in C:\apache\htdocs\quickstart\fileadmin\template\incl\incl.cookie.php on line 3

Das PHP-Script zum Anlegen des Cookies befindet sich in einer separaten Incl-Datei:

<?php
/*Cookie für den Besucherzähler mit Lebensdauer von 30 Minuten*/
setcookie("besucherkeks","ja", time()+1800);
?>

Die ersten Zeilen des HTML-Template lauten wie folgt, und wie es sich gehört wird der Cookie gesetzt, bevor alles andere passiert:

<!-- ###DOCUMENT_BODY### START -->
###PHP_COOKIE###
<html>
<head>
.........

Der Marker wird im Template des Backend durch folgenden Verweis ersetzt:
.........
seite.10{
.........
marks.PHP_COOKIE = PHP_SCRIPT_EXT
marks.PHP_COOKIE.file = fileadmin/template/incl/incl.cookie.php
.........}

Wieso stösst mein Versuch ein Cookie anzulegen bei Typo3 unter Quickstart/ in der index.php in Zeile 426 auf so viel Probleme? Hier nochmals ein Auszug aus der index.php, Zeile 426:

($c?'<!--EXT_SCRIPT.':'').$EXTiS_cPart;

Insgesamt ist die index.php für mich Anfänger doch etwas zu mächtig. Steige da nicht durch. Aber wer schon mal das gleiche Problem hatte kann mir evtl. helfen.
Danke.

Michaelh74 ·

Neben der Frage, ob ein Besucherzähler heute noch zeitgemäß ist, bleibt die Frage, ob nicht auf eine Bereits fertig Extension zurückgegriffen werden kann. Gibt es ziemlich sicher.

Mir fällt auf, daß der Part mit <!-- ###DOCUMENT_BODY### START --> zu weit oben stehlt. Der sollte besser direkt nach dem HTML <body> rein. Sonst hast Du dann in der Ausgabedatei 2 Header drin!!!

Die Fehlermeldung bedeutet, daß T3 irgendwo eine Ausgabe liefert, bevor es seinen Header setzt.

Soweit ich weiß, started T3 ja automatisch bei jedem Besucher eine Session und legt dazu auch ein Cookie ab für die Übergabe der Session ID. Besser wäre es sicher darauf aufzubauen, z.B. in einer eigene Extension.

Wo steht denn der Rest Deines Scripts? Du könntest doch auch alles in ein php Script rein packen, oder?

Gruß
Michael

Gerfried ·

Hallo Beos,

Du setzt Dein Script an einer Stelle ein, wo TYPO3 anscheinend bereits Daten an den Browser gesendet hat. Nachdem "setcookie()" die Headerinfos verändern möchte, ist es zu diesem Zeitpunkt schon zu spät.
Siehe: http://de.php.net/setcookie

3 Lösungsmöglichkeiten fallen mir ein:

1. Versuche Dein Script so weit "nach oben" zu verschieben, dass es ausgeführt wird bevor TYPO3 Ausgaben erzeugt. (ob das geht?)

2. Verwende nicht Cookies sondern eine Session Variable. (ob das Deiner Anforderung gerecht wird?)

3. Arbeite mit einem unabhängigen Script - zum Beispiel eingebettet in Deiner Seite als IMG oder als IFRAME.

Schöne Grüße,
Gerfried