![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Zrobiłem klasę która umozliwia wygodny odczyt i zapis plików w skrypcie, użyłem jej bardzo duzo wiec nie ma mowy o zamianie na inną.
Jest problem z synchronizacją plików które odczytuje: mianowicie jeśli nakładam LOCK_SH dla odczytu i LOCK_EX do zapisu, to wszystko jest dobrze do momentu gdy skrypt się zawiesi lub cokolwiek innego sie z nim stanie (np zostanie wyłączony przed zakończeniem pracy) i skrypt nie zdąży locka zdjąć, i żaden plik już nie uzyska dostępu do pliku, a każdy skrypt próbujący odczytac ten plik po prostu sie zawiesi i przytka serwer powodujac 100% zuzycie zasobów. Rozwiązanie z timeoutem tez do mnie nie przemawia bo co z tego ze skrypt sie nie zawiesi skoro nie uzyska dostepu do pliku i trzeba interweniowac recznie, a z tego co zauwazylem flock($file, LOCK_UN) wywołany z innego skryptu na plik ktory byl wczesniej zablokowany, nie działa. Rozwiązanie z tworzeniem plików .lock nie byłoby takie głupie, ale problem jest z synchronizacją.. Jeśli mam wyrażenie if (!(filelock exist)) { create filelock; } które najogolniej mowiac sprawdza czy blokujacy plik istnieje a jesli nie istnieje to tworzy plik lock dzieki czemu rezerwuje sobie dostep tez sie nie nadaje, bo jesli inny proces sie wbije miedzy instrukcje warunkowa a to co jest w jej ciele to wszystko sie rozjedzie. Jest jakis bezpieczny (ktory anuluje sie sam po pewnym czasie) sposob blokowania plików a moze jest sposob na stworzenie sekcji krytycznej w PHP? (ciągu kodu który na pewno zostanie wykonany w calosci za jednym razem i nie bedzie wymieszany z innym wątkiem) No i cudownie. Nikt nic nie wie, 3 dni wczesniej madry kolega z tego forum polecil mi przeniesienie sie z bazy danych na pliki jesli dla kazdego drzewa tworze nową tabele a teraz sie okazuje ze plików nie da sie zsynchronizować w ludzki sposob przez php i znowu musze wrocic do bazy danych i przepisywac ten durny kod jeszcze raz. Co za durny język. Kto wprowadził ten patch 5.3.2 (Usuneli sciaganie blokady pliku podczas zamkniecia skryptu) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 2 Dołączył: 9.05.2007 Skąd: INTERNET Ostrzeżenie: (0%) ![]() ![]() |
A może po prostu w miejscach gdzie skrypt może się "wywalić" pododawaj try..catch. Jeżeli zrobisz to dobrze to poza timeout-em nie powinno dojść do sytuacji w której skrypt zostanie przerwany (nie licząc zabicia procesów serwera).
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
A może po prostu w miejscach gdzie skrypt może się "wywalić" pododawaj try..catch. Jeżeli zrobisz to dobrze to poza timeout-em nie powinno dojść do sytuacji w której skrypt zostanie przerwany (nie licząc zabicia procesów serwera). Ale aplikacja powinna wytrzymac bez resetu serwera minimum tydzien a timeout moze sie zdarzyc przy wielu userach. No coz trudno zrobilem na bazie danych, najwyzej moj klient dokupi lepszy serwer jak sie zamuli albo dodam jakies memcache. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 26.09.2025 - 19:06 |