Licznik mi nie działa

0

Już działa! oto kod.

<?php    
  setcookie('abranoc','1',30+time());
  if(isset($_COOKIE['abranoc'])){
    if(!isset($_COOKIE['costanecznego'])){
        $p="index.txt";
        $plik=fopen($p, "r");
        flock($plik, 1);
        $ile=fgets($plik, 16);
        flock($plik, 3);
        fclose($plik);
        $ile++; 
        $plik=fopen($p, "w");
        flock($plik, 2);
        fwrite($plik, $ile);
        flock($plik, 3);
        fclose($plik); 
        setcookie('costanecznego','1', time()+3600*24);
        lik
    } }
?>

Bardzo proszę o pomoc. Jak mogę poprawić?
Brak błędów. Możesz zobaczyć go tu na costanecznego.pl po inkludowaniu pliku index.txt . Zawsze 74 .
Plik istnieje, a jego prawa dostępu to 0644 .

3

Przede wszystkim trzeba by ustalić co to znaczy nie działa :-) Otrzymujesz jakiś błąd, licznik się nie aktualizuje, komputer staje w płomieniach (...)?

4

fgets() zwraca false, jesli plik nie istnieje, a zrobienie ++ na false w PHP nic nie zmienia, wiec $ile to bedzie u Ciebie false. Potem na tym false robisz fwrite() a fwrite() przyjmuje string, wiec false jest castowane na string, czyli na "" wiec zapisujesz pusty string do pliku, ktory znowu bedzie odczytany jako false przez fgets().

Rozwiazanie: sprawdz czy plik istnieje, i jesli nie to zainicjalizuj $ile = 0;.

0

@gaborek1987: plik istnieje tu

4

Zrób vardump

//Twój kod
$p="index.txt";
$plik=fopen($p, "r");
var_dump($plik);
die('zatezymalem skrypt');

i zobacz co Ci zwraca fopen.
Btw ten plik pokazuje jakaś wartość typu 75.

0
gaborek1987 napisał(a):
  setcookie('abranoc','1',30+time());
  if(isset($_COOKIE['abranoc'])){

Ciastko zostanie ustawione dopiero dla kolejnego żądania http i o ile nie ładujesz licznika dwukrotnie w ciągu 30 sekund, to to się nie wykona?
Poza tym powinno być blokowanie równoległości wykonywania się skryptu, a nie blokowanie pliku, ponieważ licznik będzie źle liczył (stara wartość będzie odczytana przez wielu)?

0

@overcq: to jak zrobić żeby sprawdzał czy ciasteczka nie są zablokowane?

0
gaborek1987 napisał(a):

@overcq: to jak zrobić żeby sprawdzał czy ciasteczka nie są zablokowane?

Tak na prawdę to nie da się tego sprawdzić. Ty jesteś serverem, możesz wysłać ciasteczko do klienta, i klient może Ci je odesłać albo nie.

Jeśli nie odeśle to znaczy że albo je wyczyścił, albo są zablokowane, masa jest powodów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1