Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> blokowanie dostepu do plikow, blokowanie dostepu do plikow
Artelo
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 21.07.2005

Ostrzeżenie: (0%)
-----


Jestem tu nowy wiec chcialbym sie najpierw ze wszystkimi przywitac. Witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Napisalem sobie prosty skrypcik w php do zliczania wejsc na poszczegolne kategorie strony.

  1. <?php
  2.  
  3.  
  4. if(file_exists(&#092;"dupa/$kateg\")) 
  5.    { 
  6.       $file=fopen(&#092;"dupa/$kateg\", \"r\"); 
  7.       flock($file, 1);              
  8.  
  9.       $ile=fgets($file, 100); 
  10.  
  11.       flock($file, 3); 
  12.       fclose($file); 
  13.  
  14.       $ile++; 
  15.    } 
  16.    else 
  17.       $ile=1; 
  18.  
  19.    $file=fopen(&#092;"dupa/$kateg\", \"w\"); 
  20.    flock($file, 2); 
  21.  
  22.    fwrite($file, $ile); 
  23.  
  24.    flock($file, 3); 
  25.    fclose($file); 
  26.  
  27.  
  28. ?>

(IMG:http://forum.php.pl/uwaga.gif) - nospor

W moim mniemaniu wszystko jest dobrze bo dostep do zapisu jak i odczytu jest blokowany... Jednak okazuje sie ze tak nie jest. Przy kliku tysiacach wywolan dziennie pliki w ktorych zapisane sa liczniki odmawiaja posluszenstwa. Okazuje sie ze tego typu blokowanie nie spelnia zadania i widocznie mozliwy jest rownoczesny dostep do jego zapisu co jest przyczyna problemu.

Da sie w zablokowac owe pliki w jakis inny i bardziej efektywny sposob?
Potrzebny mi porsty licznik oparty na plikach txt wiec baza danych odpada.

Bardzo prosze o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A więc na początek: Witamy chlebem i solą.
Jesteś nowy więc nie zauważyłeś że do kodu php uzywa się odpowiedniego bbcode. Już ci poprawiłem. Na przyszłośc staraj się o tym pamiętać. Zapoznaj się również z regulaminem, aby nie było nieporozumień.

Wracając do tematu. Ja nie ufam tym flockom. Stosuje swój (niekoniecznie dobry) mechanizm. W przypadku gdy chcę się dobrać do pliku i go zablokować, tworzę drugi plik o tej samej nazwie, tylko zmieniam rozszerzenie na .lck. Gdy uznam, że plik można już odblokować, usuwam ten stworzony przezemnie.
Teraz gdy skrypt, próbuje odczytać (zapisać) plik, patrzy czy jest założony plik .lck. Jak nie ma to sam zaklada i się dobiera do pliku. Jak jest, znaczy że plik jest zablokowany i trzeba ewentualnie poczekać. Czekanie można zrealizować poprzez pętle, która np. max. 100 razy będzie sprawdzać czy plik się odblokował (zniknął .lck). Gdy tak, to wychodzi z pętli i sie do pliku dobiera, gdy nie i zostanie osiągnięta max. liczba iteracji, przerywamy próbe dobrania się do pliku i wyswietlamy jakis tam komunikat.
Ja to stosuje do sond, jakoś działa. Nie mialem problemów. Spróbuj, może i tobie to się przyda.
Go to the top of the page
+Quote Post
vala
post
Post #3





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 12.01.2005

Ostrzeżenie: (0%)
-----


a moze chodzi o to?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Kod
Warning:
flock() will not work on NFS and many other networked file systems. Check your operating system documentation for more details.

On some operating systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you may not be able to rely on flock() to protect files against other php scripts running in parallel threads of the same server instance!

flock() is not supported on antiquated filesystems like FAT and its derivates and will therefore always return FALSE under this environments (this is especially true for Windows 98 users).

Dodałem bbcode. Też o tym myślałem. Dlatego też nie używam flock - nospor
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:44