Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP]Odpowiednik flock() dla plików xml?
Forum PHP.pl > Forum > Przedszkole
axxxon
Witam!
Próbowałem zastosować flock() w swoim skrypcie dla odczytu pliku xml, niestety nie dało to pozytywnego efektu. tj albo wywala mi błąd, albo gdy skrypt jest uruchamiany parokrotnie w tym samym czasie flock nie działa, wszystkie naraz grzebia w pliku.
przykładowy kod:
  1. $this->filename='/sciezka/do/pliku.xml'; // gdzies w konstruktorze
  2.  
  3. //inna metoda
  4. $handle = fopen($this->filename,"a+");
  5. while(!flock($handle,LOCK_EX))
  6. {
  7. usleep(100000);//usypiamy na chwile skrypt
  8. }


czasami pojawiający się błąd: flock() expects parameter 1 to be resource, string given.

Czy robię coś nie tak?
Wersja php: 5.3.5

Moje pytanie:
Czy istnieje odpowiednik dla flock dla plików xml, w przypadku odczytywania przy pomocy DomDocument::load()?
Fifi209
A jak to testowałeś? To ma bronić przed zapisem a nie przed odczytem.
axxxon
Testowałem to z różnymi opcjami fopen() zarówno dla "r","r+","w", a także "c+", efekt jest jednak taki sam:
albo pojawia się pokazany wyżej błąd albo plik zostaje zepsuty.

Ogólnie chodzi mi o to żebym w jednym skrypcie przy wywołaniu DomDocument::load() blokował on odczyt i zapis pliku do momentu wywoałania DomDocument::saveXml(), chciałbym wykorzystać flock'a do tego własnie...
Fifi209
Zastosowałeś:

LOCK_EX to acquire an exclusive lock (writer).

A wystarczyło poczytać manuala:

LOCK_UN to release a lock (shared or exclusive).
axxxon
Dobra, rozumiem tylko teraz pytanie, odnośnie 2 błędu. Skąd on się bierze?

Cytat(axxxon @ 12.07.2011, 10:03:12 ) *
czasami pojawiający się błąd: flock() expects parameter 1 to be resource, string given.


Edit: a co odnosnie locków dla plików otwieranych i zmienianych przez DomDocument::load() i DomDocument::save() - czy istnieje bezpośrednia opcja ich lockowania?
Fifi209
Musi to być zasób, co oznacza że pewnie fopen zwraca błąd ;]
axxxon
Cytat(Fifi209 @ 12.07.2011, 13:40:04 ) *
Musi to być zasób, co oznacza że pewnie fopen zwraca błąd ;]

Włąsnie nie zwraca, otwarcie pliku jest poprawne, mam to w nie umieszczonym w temacie kawałku kodu sprawdzane...
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.