[PHP] Znowu mały problem :)

0

Oto prosty kod licznika:

<html>
<head>
<title>PHP DETOX</title>
</head>
<body>

<font color="brown" size="16" face="arial"><b>

<script language=php>

echo("Jesteś ");

if(file_exists("licznik.n"))
{ / sprawdza, czy plik istnieje /
$file=fopen("licznik.n", "r"); / otwiera plik /
flock($file, 1); / blokuje plik /

$ile=fgets($file, 100); / odczytuje wartość /

flock($file, 3); / odblokowuje plik /
fclose($file); / zamyka plik /
$ile++;

$file=fopen("licznik.n", "w"); / otwiera plik do zapisu /
flock($file, 2); / blokuje do zapisu /

fwrite($file, $ile); / zapisuje wartość /

flock($file, 3); / odblokowuje plik /
fclose($file); / zamyka plik /

}

echo($ile); / wyświetla wartość /

echo(" osobą na tej stronie!");

</script>

</font></b>

</body>
</html>

Chodzi o to, że cały czas jest "Jesteś 1 osobą na tej stronie", zamiast zwiększać wartość. W programie TC, ustawiłem atrybuty pliku licznik.n na 777 ale dalej jeste cały czas "Jesteś 1 oso...". Czemu nie działa?

0

Przed zwiekszeniem zmiennej $ile, sprawdz, jaka jest jej wartosc, ok?

A odczytanie wartosci z pliku tekstowego mozesz realizowac rowniez tak:

$file = file("licznik.n");
echo ++$file[0]; // zwiększanie i odczytanie wartości

0

file jest funkcja od ktorej sie odchodzi, bo jest zwalnia skrypt.

0

file jest funkcja od ktorej sie odchodzi, bo jest zwalnia skrypt.

Hmm... a gdzie ty to wycztylaes? [stuk]

0

file jest funkcja od ktorej sie odchodzi, bo jest zwalnia skrypt.

Hmm... a gdzie ty to wycztylaes? [stuk]

Może Roszi źle się wyraził (albo Ty Adam źle zrozumiałeś), bo domyślam się, że chodziło mu o duże pliki, ponieważ wczytanie pliku (np. w php można napisać analizator logów serwera) typu log serwera (minimum kilka MB) do tablicy to niezbyt ekonomiczne rozwiązanie (ile to pamięci "pożera").
Ale przy małych plikach nie widze problemu, ale jak się coś robi to lepiej być konsekwentnym. :)

0

Zapomniałem jeszcze miałem podać przykład takiego skryptu (licznika):

function zlicz_odwiedziny_gosci() {
$plik = fopen("licznik.lic", "r"); // otwieramy plik do odczytu (o czym świadczy litera "r")
$licznik = chop(fgets($plik, 20)); // cyfra 20 oznacza ile znaków ma czytać z pliku (chyba nie będziesz mieć więcej niż 20 cyfrowej ilości odwiedzin (a może ;)) :)), a funkcja chop() "obcina" pobrany ciąg znaków tak, żeby nie było pustych znaków (bo jeżeli miałbyś 4 znaki to 16 byłoby pustych, a tak to te puste znaki są "ucinane"
fclose($plik); // zamykamy plik
echo($licznik); // wyświetlamy ilość odwiedzin
$licznik++; // zwiększamy wartość licznika
$plik = fopen("licznik.lic", "w"); // otwieramy plik do zapisu (o czym świadczy litera "w")
fputs($plik, $licznik); // dopisujemy do pliku nową (zwiększoną) wartość licznika
fclose($plik); // zamykamy plik
}

Teraz, aby użyć licznika to w pliku, w którym ma być licznik np. index.php robisz na początku tak:

A w miejscu gdzie ma być wyświetlony licznik piszesz tak:
!

To wszystko :)

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