Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> fileputcontents vs fopen - fwrite
Apo
post 10.04.2009, 12:23:07
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Witam

Mam pytanie odnośnie zapisywania danych do pliku, mam wykonana biblioteke cachujaca zapytania z bazy danych do pliku.
Użyłem w niej funkcji file_put_contents do zapisu danych do pliku. Problem pojawia się gdy 1 plik cache chce
stworzyć kilkudziesięciu użytkowników (bardzo duży ruch na stronie), wtedy strona strasznie spowalnia do czasu aż cache w końcu zostanie utworzony.

Czy funkcja file_put_contents używa blokowania plików do zapisu jak f_lock(LOCK_EX)?
Jeśli nie to czy przechodząc na standardowe funkcje fopen, fwrite,flock problem zostanie rozwiązany?


Pozdrawiam
Go to the top of the page
+Quote Post
mike
post 10.04.2009, 12:27:24
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Apo @ 10.04.2009, 13:23:07 ) *
Czy funkcja file_put_contents używa blokowania plików do zapisu jak f_lock(LOCK_EX)?
Załóżmy, że ktoś Ci to tu napisze. Jaką będzie miał gwarancję, że to przeczytasz?
W końcu to będzie zwykły tekst pisany. Taki sam jak w dokumentacji. Zawierający takie same informacje.
No a dokumentacji nie przeczytałeś. W takim razie po co ktoś miałby zadawać sobie trud pisania do osoby, która nie zadaje sobie trudu czytania?

http://pl.php.net/manual/pl/function.file-put-contents.php
Cytat
Parametry
Cytat
flags
Cytat
LOCK_EX - Acquire an exclusive lock on the file while proceeding to the writing.
Go to the top of the page
+Quote Post
guitarnet.pl
post 10.04.2009, 17:42:42
Post #3





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

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


flock() powinno zalatwic sprawe
po prostu zanim wykonasz akcje cache sprawdz czy plik nie ma aktywnego lock, jesli ma to znaczy ze cache sie juz odswieza i wyswietlaj strone bez cache lub ze starego pliku cache jesli czytanie z pliku bedzie mozliwe, potestuj

w manualu php masz przyklad dokladnie taki o jaki pytasz, mialem podobny problem i to bardzo pomoglo, dodatkowo mozesz pomyslec nad zmiana sposobu cachowania, zamiast cachowania wynikow sql mozna cachowac caly buffor (ob_start) dla niezalogowanych uzytkownikow poniewaz dla nich strona bedzie wygladac identycznie, natomiast dla zalogowanych mozesz cachowac tylko wybrane elementy strony czy to przez wyniki sql czy tez przez cachowanie widokow

sposob cachowania zawsze nalezy dobrac do struktury strony, nie ma zlotego srodka


--------------------
Skrypty php, ajax, javascript
Go to the top of the page
+Quote Post
erix
post 10.04.2009, 23:38:26
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
po prostu zanim wykonasz akcje cache sprawdz czy plik nie ma aktywnego lock

Albo prościej byłoby pewnie is_writable" title="Zobacz w manualu PHP" target="_manual.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
guitarnet.pl
post 14.04.2009, 17:11:28
Post #5





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

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


manual mowi ze wynik is_writable funkcji moze byc cachowany co daje koniecznosc uzycia clearstatcache()

flock nie jest cachowalny, pytanie ile tych odwolan jest na sec/ms/us i jak zachowuje sie cache i czy "reczna" kontrolowana blokada na pliku nie jest lepszym rozwiazaniem gwarantujacym ze 1 odwolanie do zapisu pliku zakonczy sie 100% powodzeniem majac LOCK_EX a reszta korzysta z wersji "live"
w komentarzach manuala ktos zaproponowal rozwiazanie tworzenia pliku tymczasowego dla reszty odwolan podczas gdy blokowany plik jest zapisywany/odswiezany

nie wykonywalem testow szybkosci i wydajnosci pomiedzy tymi rozwiazaniami, warto by sprawdzic
operation is one of the following:
  • LOCK_SH to acquire a shared lock (reader).
  • LOCK_EX to acquire an exclusive lock (writer).
  • LOCK_UN to release a lock (shared or exclusive).
  • LOCK_NB if you don't want flock() to block while locking. (not supported on Windows)


--------------------
Skrypty php, ajax, javascript
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 21:47