Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie przed usunieciem danych z pliku
dublinka
post 17.09.2011, 14:33:14
Post #1





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Witam,
Na wstepie chce sie przywitac.

Problem pojawia sie kiedy dostep do pliku ma wiecej niz jeden user w tym samym momencie (nie czesto to jest ale zawsze moze byc a kiedys juz tak mialam).Za przyklad moze posluzyc nam licznik ktory zostanie wtedy wyzerowany.
Ktos ma jakis pomysl na to questionmark.gif


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Noidea
post 18.09.2011, 13:37:34
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Cytat
Nic nie chce osiagnac tylko obejsc blad ktorym jest wariowanie parsera poniewaz jesli dostep do pliku nastepuje dwukrotnie (i tutaj nie pomoze flock uwierz mi) wlasnie parser glupieje i domyslnie wstawia 0.

Widzę, że cie nie przekonam, że flock załatwi sprawę. W takim razie sama będziesz musiała to sprawdzić. Użyj ApacheBench - fajne narzędzie do sprawdzania jak zachowuje się skrypt pod obciążeniem, dostarczane razem z serwerem Apache (ab.exe w folderze bin). Zasymuluj 100 użytkowników wykonujących przynajmniej 50000 rządań takim poleceniem
Kod
ab.exe -n 50000 -c 100 localhost/test_licznika.php

Przetestuj tym sposobem kod z forum KS, oraz mój kod:
  1. <?php
  2.  
  3. if( !file_exists( "licznik.txt" ) )
  4. {
  5. $fp = fopen( "licznik.txt", "w+" );
  6. }
  7. else
  8. {
  9. $fp = fopen( "licznik.txt", "r+" );
  10. }
  11. // Powyższe linijki można zastąpić jedną:
  12. // $fp = fopen( "licznik.txt", "c+" );
  13.  
  14. flock( $fp, LOCK_EX );
  15.  
  16. $licznik = fread( $fp, 4096 );
  17. fseek( $fp, 0 );
  18. fwrite( $fp, $licznik + 1 );
  19.  
  20. flock( $fp, LOCK_UN );
  21. fclose( $fp );
  22.  
  23. ?>

i sprawdź jaka liczba pojawi się w pliku licznik.txt


Jeśli kod z funkcją file_put_contents( "plik.txt", $wartosc, LOCK_EX ) nie daje poprawnego wyniku, to znaczy, że funkcja ta została źle napisana (Blokada jest nakładana przed zapisem, ale po wyczyszczeniu zawartości pliku, więc nie należy na niej polegać w 100%. Cóż, uroki PHP...)


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 06:46