[php] licznik odwiedzin zwraca błąd

Witam, ściągnąłem sobie licznik odwiedzin, jednak php wyświetla błąd i licznik nie jest odporny na odświeżanie, chociaz powinien być.

kod licznika

<?php

$arrFile = array();

$arrPlik = array();


if( $_COOKIE['licznik'] )

{

        $arrFile = file( "licznik.dat" );

        $arrPlik = explode("||", $arrFile[0]);

}


else

{

        setcookie('licznik', '1', time()+(60*60*3600)); // <=tutaj stwierdza błąd

        $arrFile = file( "licznik.dat" );

        $arrPlik = explode("||", $arrFile[0]);


        if( $arrPlik[0] == date("d") )

        {

                $arrPlik[2]++; //zwiększenie ilości w dzisiejszym dniu

                $arrPlik[3]++; //zwiększenie ogólnej liczby odwiedzin

        }


        else

        {

                $arrPlik[0] = date("d"); //nadanie nowej daty

                $arrPlik[1] = $arrPlik[2]; //zapamiętanie ile osób odwiedziło stronę wczoraj

                $arrPlik[2] = 1; //ustawienie nowej wartości dla dzisiaj

                $arrPlik[3]++; //zwiększenie ogólnej liczby odwiedzin

        }


        $temp = implode("||", $arrPlik);

        $arrFile = fopen( "licznik.dat", 'w');

        fwrite($arrFile, $temp);

        fclose($arrFile);

        $arrFile = file( "licznik.dat" );

        $arrPlik = explode("||", $arrFile[0]);

}

//wyświetlenie

echo 'odwiedziło nas: ' . $arrPlik[3] . '

      wczoraj: ' . $arrPlik[1] . '


      dzisiaj: ' . $arrPlik[2] . '';


?>[/code]


[b]błąd:[/b]

[code]Warning: Cannot modify header information - headers already sent by (output started at /home/platech/domains/platech.pl/public_html/projekty/tapicer/index.php:8) in /home/platech/domains/platech.pl/public_html/projekty/tapicer/licznik.php on line 26

tutajmożna zobaczyć w necie.

Dziękóweczka, pozdro

Dodane 20.09.2010 (Pn) 16:24

wrzuciłem teraz inny skrypcik, oparty o mysql, ale też nie jest odporny na odświeżanie :confused: przechodze na inna podstrone i juz nabija :confused:

obsługa ciastek w php musi być na samym początku skryptu/strony, podobnie jak header’y

-inaczej będzie wywalało taki właśnie błąd.

W takim przypadku wystarczy zbuforować stronę

<?php ob_start(); ?>


tutaj kod strony, skrypty etc


<?php ob_end_flush(); ?>

Błąd ten jest wyświetlanie w momencie gdy chcesz dodać ciastko, przekierować stronę itp. po wysłaniu wcześniejszych danych tzn. że zapewne ten kod jest częścią jakieś większej całości, która wcześniej coś wysyła (np. echo)

Ps. Kolega wyżej szybszy o parę sekund :smiley:

całą zawartość index.php do której includuje podstrony objąłem tym kodem i nic mi to nie dało :confused:

ob start musi być na samym początku dokumentu, wcześniej nic nie może być nawet spacji

dokładnie tak jest…

Dodane 20.09.2010 (Pn) 23:21

Gdy mam ustawione kodowanie strony na utf-8 jest źle. Przy pozostałych nie wyświetla komunikatu, ale wykrzacza polskie znaki :confused:

Czy przypadkiem nie korzystasz z utf-8 z BOM ?

Ma być bez BOM !

Bez BOM jest znacznie lepiej :wink: