![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
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 flagsCytat LOCK_EX - Acquire an exclusive lock on the file while proceeding to the writing. |
|
|
![]()
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
|
|
|
![]()
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! |
|
|
![]()
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:
-------------------- Skrypty php, ajax, javascript
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.06.2025 - 21:47 |