Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: fileputcontents vs fopen - fwrite
Forum PHP.pl > Forum > PHP
Apo
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
mike
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.
guitarnet.pl
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
erix
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.
guitarnet.pl
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)
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.