Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z licznikiem odwiedzin & cookies
Forum PHP.pl > Forum > PHP
ddzkm
Mam pytanko - co może być przyczyną notorycznego wyświetlania przez przeglądarkę poniższego komunikatu:

Warning
: Cannot modify header information - headers already sent by (output started at /home/adres.strony/public_html/test/temp/templates_c/%%45^45E^45E480CD%%index.tpl.php:8) in /home/adres.strony.pl/public_html/test/licznik.php on line 9

Wiem, że problem polega na ciasteczkach, ale gdzie on leży kompletnie nie mam pojęcia. Próbowałem instalować już chyba wszystkie rodzaje liczników php, ale albo nie działają (wyświetlajac powyższy komunikat), albo nie blokują odświeżenia, albo też same blokują się na jednej wartości odwiedzin. Zaznaczam, że mój serwer obsługuje php, a ja mam włączoną obsługę cookies w przeglądarce. Będę bardzo wdzięczny za pomoc, siedzę już nad tym drugi dzień i nic sam nie umiem z tym zrobić sad.gif
phpion
Cytat(ddzkm @ 24.02.2009, 20:01:53 ) *
Mam pytanko - co może być przyczyną notorycznego wyświetlania przez przeglądarkę poniższego komunikatu:

Warning
: Cannot modify header information - headers already sent by (output started at /home/adres.strony/public_html/test/temp/templates_c/%%45^45E^45E480CD%%index.tpl.php:8) in /home/adres.strony.pl/public_html/test/licznik.php on line 9

Ja również mam pytanko - próbowałeś szukać? Temat porszuany tysiące razy, wystarczy poszukać.
ddzkm
Nic nie pomaga, a zrobiłem tak jak tam jest napisane. Mam jeszcze pytanie - czy zastosowanie plików .tpl może tu mieć znaczenie? Bo kod licznika jest zapisany w pliku licznik.php, a rezultat przesyłany do pliku licznik.tpl za pomocą polecenia:

{include_php file="licznik.php"}
Foxx
Dopóki nie wkleisz odpowiednich fragmentów kodu, nie da się pomóc.
ddzkm
Zawartość pliku licznik.php:
CODE
function polnoc() /* odmierza ile sekund od danej chwili jest do konca dnia*/
{
$teraz = date("H:i:s");
$czas = explode(":", $teraz);
$godziny = 23-$czas[0];
$minuty = 59-$czas[1];
$sekundy = 59-$czas[2];
$waznosc = $godziny*3600 + $minuty*60 + $sekundy;
return $waznosc;
}

if((!isset($_COOKIE['licznik'])) && (!strstr($_SERVER['HTTP_REFERER'], "www.nazwa-strony.pl")))
{

$plik = fopen("licznik.txt", "r");
$tekst = fread($plik, filesize("licznik.txt"));
$dane = explode(";", $tekst);
fclose($plik);
$plik = fopen("licznik.txt", "w");
flock($plik, 2);
$dane[0]++;
fwrite($plik, "$dane[0];", 15);
flock($plik, 3);
fclose($plik);

/*LICZNIK DZIENNY - MADE BY WOWO */
$data = date("Y-m-d"); /*zmienna przechowująca dzisiejszą datę*/
$dzienny=fopen("dzienny.txt","r"); /*otwieramy plik, plik jest formatu yyyy-mm-dd:liczba:yyyy-mm-dd:liczba, gdzie pierwsza data jest data dzisiejsza, pierwsza liczba liczbą odwiedzin dzisiaj, druga data, to data wczorajsza, druga liczba to liczba odwiedzin wczoraj*/
$dzienny_tekst =fread($dzienny, filesize("dzienny.txt")); /*czytamy caly plik do zmiennej dzienny_tekst*/
$dane2 = explode(":", $dzienny_tekst); /*rozbijamy wczytany tekst z pliku, na daty i liczby klikniec - calosc bedzie w tabeli*/
fclose($dzienny); /*zamykamy plik, ktory otwarlismy tylko do odczytu*/

if($dane2[0]==$data) /*jesli w pierwsza data w pliku jest data dzisiejsza to dzialamy jak nizej*/
{ $dane2[1]++; /*zwiekszamy liczbe klikniec dzisiaj*/
$dzienny=fopen("dzienny.txt","w"); /*otwieramy plik do zapisu*/
flock($dzienny, 2); /* blokujemy plik przed zapisem*/
fwrite($dzienny, "$dane2[0]:$dane2[1]:$dane2[2]:$dane2[3]", 30); /*zapisujemy calość do pliku */
flock($dzienny, 3); /* odblokowujemy plik */
fclose($dzienny); /* zamykamy plik */
}
else/* jeśli pierwsza data w pliku nie jest dzisiejszą datą */
{ $dane2[2]=$dane2[0]; /* druga date w pliku ustawiamy, ta ktora byla do tej pory pierwsza*/
$dane2[3]=$dane2[1]; /* druga liczbe odwiedzin ustawiamy, ta ktora byla do tej pory pierwsza*/
$dane2[0]=$data; /* ustawiamy pierwsza date w pliku na date dzisiejsza*/
$dane2[1]=1; /* liczbe klikniec ustawiamy na 1 bo sa to pierwsze odwiedziny tego dnia*/
$dzienny=fopen("dzienny.txt","w"); /*otwieramy plik do zapisu*/
flock($dzienny, 2); /*blokada zapisu*/
fwrite($dzienny, "$dane2[0]:$dane2[1]:$dane2[2]:$dane2[3]", 30); /*zapisujemy calość do pliku */
flock($dzienny, 3);/* odblokowujemy plik */
fclose($dzienny);/* zamykamy plik */
}


setcookie("licznik", "zliczono", time()+polnoc()+1 ); /* cookie blokuje licznik do konca doby */
}else{

$plik = fopen("licznik.txt", "r"); /* obsluga licznika stalego*/
$tekst = fread($plik, filesize("licznik.txt"));
$dane = explode(";", $tekst);
fclose($plik);

$dzienny=fopen("dzienny.txt","r"); /* obsluga licznika dziennego*/
$dzienny_tekst =fread($dzienny, filesize("dzienny.txt"));
$dane2 = explode(":", $dzienny_tekst);
fclose($dzienny);
}
?>

Stronę odwiedziło:<?php echo($dane[0]); ?> gości.
Dzisiaj (<?php echo($dane2[0]); ?>) stronę odwiedziło: <?php echo($dane2[1]); ?> gości.
Wczoraj (<?php echo($dane2[2]); ?>) stronę odwiedziło: <?php echo($dane2[3]); ?> gości.


Zawartość pliku licznik.tpl:
CODE

<TD ID="box_a">
<B>Statystyki serwisu:</B>
</TD>
</TR>
<TR>
<TD ID="box_b">
{include_php file="licznik.php"}
</TD>
</TR>
<TR>
<TD ID="box_a">
<B>Dzisiaj jest...</B>
</TD>
</TR>
<TR>
<TD ID="box_b">
{$smarty.now|date_format:"%Y-%m-%d"};
</TD>
</TR>
<TR>
<TD ID="box_a">
<B>Godzina:</B>
</TD>
</TR>
<TR>
<TD ID="box_b">
{$smarty.now|date_format:"%H:%M:%S"};
</TD>
</TR>
<TR>
Foxx
1. Zastosuj znaczniki do kodu PHP bo teraz jest nieczytelny i nikomu się nie chce go czytać.
2. Po pobieżnym zerknięciu wydaje mi się, że nie wkleiłeś odpowiedniego fragmentu, gdzieś może korzystasz z funkcji header albo session_start ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.