Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [XML][PHP]Odpowiednik flock() dla plików xml?
axxxon
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 28.10.2010

Ostrzeżenie: (0%)
-----


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()?

Ten post edytował axxxon 12.07.2011, 09:06:15
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


A jak to testowałeś? To ma bronić przed zapisem a nie przed odczytem.
Go to the top of the page
+Quote Post
axxxon
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 28.10.2010

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Zastosowałeś:

LOCK_EX to acquire an exclusive lock (writer).

A wystarczyło poczytać manuala:

LOCK_UN to release a lock (shared or exclusive).
Go to the top of the page
+Quote Post
axxxon
post
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 28.10.2010

Ostrzeżenie: (0%)
-----


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?

Ten post edytował axxxon 12.07.2011, 12:17:01
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Musi to być zasób, co oznacza że pewnie fopen zwraca błąd ;]
Go to the top of the page
+Quote Post
axxxon
post
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 28.10.2010

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post

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: 24.08.2025 - 13:18