Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Współdzielenie plików w PHP
Forum PHP.pl > Forum > PHP
Orzeszekk
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)
Tibod
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).
Orzeszekk
Cytat(Tibod @ 23.10.2011, 17:32:10 ) *
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.