Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Współdzielenie plików w PHP, Jak rozwiązać odczyt z plików żeby sie nie zakleszczało
Orzeszekk
post
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)
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 05:45