![]() |
![]() ![]() |
![]() |
![]()
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 ![]() -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Osobny plik dla każdego użytkownika lub grupowanie uzytkowników na tych co mogą zapisywać/kasować pliki i na tych co mogą jedynie je odczytywać...?
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
To jest wyjscie ale nie o to chodzi konkretnie.Zalozmy ze prawa sa dla kazdego takie same - jak leci jest zapis.To moze jest szukanie dziury w calym ale jak to obejsc bo zapis do jednego pliku np. licznika wywola taki efekt lub cokolwiek innego tzn dane prowadzone np. plik jako baza dla danych np. ksiazki danych.Wiem ze sa do tego bazy ale tak wlasnie do plikow sie doczepiam
![]() Mam niby wyjscie dla tego ale nie wiem czy nie zbyt toporne: Ustawic plik .tmp w dowolnej sciezce... Najpierw sprawdzenie czy tenze plik istnieje, jesli nie to ustawic i zapisywac dane, pozniej usunac.Jesli user nr 2,3,4,34..bedzie probowal zapisu i plik .tmp bedzie znajdowal sie to np. przeladowac strone lub dac sleep na ilestam. Tylko nie wiem czy to nie jest topornym rozwiazaniem i szukam innych ![]() -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 1 Dołączył: 23.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Może napisz co konkretnie chcesz uzyskać
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
1. Naucz się poprawnie pisać po polsku bo to co napisałaś woła o pomstę do nieba
2. Zamiast kombinować z .tmp wystarczy nadać plikom przedrostki np. - plik otwarty przez użytkownika ma przedrostek 'close_' - plik nieużywany 'open_'
Niedogodnością takiego rozwiązania jest przerwanie działania skryptu a co za tym idzie plik nie zmieni nazwy z 'close_' na 'open_' ![]() Ten post edytował CuteOne 17.09.2011, 15:31:24 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ustawic plik .tmp w dowolnej sciezce... Najpierw sprawdzenie czy tenze plik istnieje, jesli nie to ustawic i zapisywac dane, pozniej usunac.Jesli user nr 2,3,4,34..bedzie probowal zapisu i plik .tmp bedzie znajdowal sie to np. przeladowac strone lub dac sleep na ilestam. flock - domyślnie zatrzyma wykonywanie skryptu do czasu, aż inny proces nie zwolni blokady na pliku. Jeśli użyjesz flagi LOCK_NB, skrypt nie będzie blokowany a funkcja od razu zwróci true lub false -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
flock - domyślnie zatrzyma wykonywanie skryptu do czasu, aż inny proces nie zwolni blokady na pliku. Jeśli użyjesz flagi LOCK_NB, skrypt nie będzie blokowany a funkcja od razu zwróci true lub false nic nie ma sie to do praktyki bo uwierz mi wiem co to flock ![]() Ten post edytował dublinka 17.09.2011, 17:38:29 -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Działanie flocka jest równoważne z twoim pomysłem na użycie pliku .tmp. Tyle że jest to rozwiązanie prostsze i pozbawione kilku błędów, np:
- proces 1 sprawdza czy plik .tmp istnieje => nie istnieje - proces 2 sprawdza czy plik .tmp istnieje => nie istnieje - proces 1 tworzy plik .tmp Napisz dokładnie co chcesz osiągnąć i dlaczego flock nie sprawdzi się w przypadku twojego problemu -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Dlatego używa się baz danych. ;]
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
Napisz dokładnie co chcesz osiągnąć i dlaczego flock nie sprawdzi się w przypadku twojego problemu 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. Do autora powyzej. Tutaj mowa o pliku nie bazie jesli nie doczytales jeszcze. Tematow jest sporo np tutaj http://forum.ks-ekspert.pl/topic/133134-ph...od-obciazeniem/ -------------------- |
|
|
![]()
Post
#11
|
|
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:
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...) -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 18:16 |