Skocz do zawartości

Zapisywanie do pliku.


Irek

Rekomendowane odpowiedzi

Podczas zapisu do pliku przez kilka osób może się pojawić sytuacja, że dwie osoby będą chciały zapisać równocześnie.

Chcę aby skrypt czekał aż plik będzie wolny do zapisu.

Napisałem to w taki sposób

while (!flock($plik,6))
{
flock($plik,2);
}
... zapis do pliku...
flock($plik,3);

Mam pytanie do znawców tematu.

Czy to będzie działać prawidłowo ?

Wszędzie gdzie szukałem (może słabo) jest to zrobione przez

if($plik && flock($plik,LOCK_EX))
{
... zapis ...
}

Jednak przy takim rozwiązaniu dane są tracone.

Niestety nie mam jak tego sprawdzić w praktyce ;)

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.

Roman Kluska ujawnia: nadchodzi INFLACYJNY ARMAGEDON!

 

Wielki Elektronik

Odnośnik do komentarza
Udostępnij na innych stronach

Irek

Patrzac na sam algorytm nie zalecałbym takiego stosowania w pętli while.

Teoretycznie istnieje takie prawdopodobieństwo, ze nigdy nie uzyska dostepu a tym samym zapetli sie program...

Jest tam jeszcze potrzebne dodatkowe zalozenie, ktore pozwoli sprawdzic ilość takich pętli albo czas ich trwania.

Druga sprawa tojest taka, ze nei zabezpieczysz pliku jesli go nie ma ! I tu juz jest błąd.

Kolejny błąd to wykonywanie FLOCK 2 razy po zabezpieczeniu w petli brak weryfikacji

Mysle ze to powinno wyglądać jakoś tak:

if($plik) {
$petla=0; # dla petli
$zabezpieczone = 0;  # dla weryfikacji po wysciu z petli
while (!$zabezpieczone && ($petla<1000)) {
$zabezpieczone = flock($plik,6);
$petla++;
}
if ($zabezpieczone) {
... dzialania po zabezpieczeniu
} else {
.... dzialania gdy nie mozna zabezpieczyc
}

} else {
... dzialania gdy brak pliku
}

Odnośnik do komentarza
Udostępnij na innych stronach

Odradzam prace na plikach - zastosuj baze danych i bedziesz mial z glowy wspoldzielenie.

kcs_kataloog_info.gif - katalog stron KCS promocja stron - dodaj ciekawą stronę

pks-katalog.gif - katalog stron PKS interesujące strony - dodaj interesującą stronę

Najlepsze miejsce dla e-mieszkańca powiatu piaseczyńskiego to serwis e-piaseczno i okolice

Odnośnik do komentarza
Udostępnij na innych stronach

Patrzac na sam algorytm nie zalecałbym takiego stosowania w pętli while.

Teoretycznie istnieje takie prawdopodobieństwo, ze nigdy nie uzyska dostepu a tym samym zapetli sie program...

Jednak przy takim założeniu pozostaje jedynie stracić dane. Co by się nie napisało to istnieje szansa że nie będzie dostępu do pliku :)

Druga sprawa tojest taka, ze nei zabezpieczysz pliku jesli go nie ma ! I tu juz jest błąd.

To pominąłem w swoim poście jako że jest to raczej oczywiste :)

Kolejny błąd to wykonywanie FLOCK 2 razy po zabezpieczeniu w petli brak weryfikacji

Nie widzę gdzie jest druge zabezpieczanie. Weryfikacją jest chyba while ?

Odradzam prace na plikach - zastosuj baze danych i bedziesz mial z glowy wspoldzielenie.

Nie wszędzie gdzie jest php jest dostęp do bazy danych.

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.

Roman Kluska ujawnia: nadchodzi INFLACYJNY ARMAGEDON!

 

Wielki Elektronik

Odnośnik do komentarza
Udostępnij na innych stronach

Chcę aby skrypt czekał aż plik będzie wolny do zapisu.
Blokada na pliku nie trwa 10 minut wiec nie ma potrzeby pisać jakiś pętli sprawdzających czy jest plik wolny są to ułamki sekund. Czy jest blokada sprawdzi maszyna PHP .... no chyba, że nie wiem będą to jakieś ogromne pliki i czas wykonywania skryptu się skończy.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

...nie ma potrzeby pisać jakiś pętli sprawdzających czy jest plik wolny są to ułamki sekund....

Napisalem to w oparciu o wlasne doswiadczenia.. ktore dowodzą, że czasem są przypadki nieprzewidywalne powodujace, ze skrypt sie nie doczeka az plik bedzie wolny.. (błąd prawdopodobie samego PHP lub serwera to spowodował - mialem taki przypadek).

Idąc dalej dobrze jest dbac o takie pułapki programistyczne (możliwość zapętlenia).... i dlatego nie zgadzam sie z Twoją wypowiedzia, ze nie trzeba sprawdzac... troche roznych aplikacji w swoim zyciu ju napisalem i to nie tylko w PHP.

Odnośnik do komentarza
Udostępnij na innych stronach

Idąc dalej dobrze jest dbac o takie pułapki programistyczne (możliwość zapętlenia).... i dlatego nie zgadzam sie z Twoją wypowiedzia, ze nie trzeba sprawdzac...

Dokładnie. Lepiej dmuchać na zimne.

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.

Roman Kluska ujawnia: nadchodzi INFLACYJNY ARMAGEDON!

 

Wielki Elektronik

Odnośnik do komentarza
Udostępnij na innych stronach

Ponadto jak chodzi o funkcje flock():

Ostrzeżenie: Te blokady dotyczą tylko bieżącego procesu PHP. Inne procesy mogą modyfikować i usuwać zablokowane przez PHP pliki - jeśli tylko pozwolą im na to prawa dostępu do tych plików. Zwróć uwagę również na to, że wielowątkowe serwery takie jak IIS mogą nieprawidłowo obsługiwać pliki zablokowane funkcją flock(). I inne wątki w tej samej instancji serwera będą mogły modyfikować pliki - niezależnie od założonych blokad.
Cytat z ksiażki leksykon funkcji PHP.

Zresztą do przechowywania ważnych informacji [w tym kontekście] nie stosuje sie plików i zapisu do nich tylko baz danych...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

To sobie podmuchałem na zimne :P

Biorę się za bazę danych.

Wszystko Irek zalezy od potrzeb...

Tworze obecnie katalog stron... na plikach. Nie ma tu zagrozen zwiazanych z takim problemem a miejsca newralgiczne bede traktowal jak pliki tymczasowe czyli w nazwie pliku wstawiam date+godzine+round().

Odnośnik do komentarza
Udostępnij na innych stronach

Jak ktoś koniecznie chce pliki tekstowe może skorzystać z Lite SQL czyli bazie danych opartych na plikach tekstowych. Niestety standardowo dopiero zaimplementowana jest w PHP5 .

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Jak ktoś koniecznie chce pliki tekstowe może skorzystać z Lite SQL czyli bazie danych opartych na plikach tekstowych. Niestety standardowo dopiero zaimplementowana jest w PHP5 .

97909[/snapback]

Z LiteSQL jest taki problem, ze owszem dziala na plikach, jednak probujac udawac SQL-owa baze komplikuje obsluge plikow. W rezultacie do prostych rzeczy nie oplaca sie tego uzywac, bo samemu napisac obsluge, to 3funkcjena krzyz i masz dokladnei to czego potrzebujesz. Bardziej skomplikowanych rzeczy wogole nei oplaca sie pisac na lpikach, szczegolnie przy tych cenach za serwer z baza danych.

@ktos o transakcjach

Ale kazdy serwer baz danych ma kolejkowanie dostepu, nie wiem co tu do rzeczy maja tranzakcje...

NEOTERIC Mateusz Kurleto

strony www sklepy internetowe webdesign

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności