Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Kolejkowanie dostepu do plikow
axxxon
post
Post #1





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

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


Witam!
Chciałbym się dowiedzieć czy istnieje jakiś efektywny sposób na kolejkowanie skryptom dostępu do pliku.
Ogólnie moja sytuacja wygląda tak:

Mam 4 skrypty wykorzystujące jeden plik, skrypty mogą działać równocześnie, ale nie muszą, każdy skrypt ma zmienna która mówi o pewnej kolejności
Obecnie jeśli plik jest wykorzystywany każdy ze skryptów ma ustawiony
  1. usleep(500000);

jednak w takim wyjściu skrypt o id np 3. odczytuje plik wcześniej niż ten o id 2.

Dodatkowym utrudnieniem jest to ze skrypty nie są zawsze uruchamiane wg. kolejności:
czyli np. 5 razy pod rzad uruchamiany jest skrypt o id 1, potem uruchamiane są równocześnie skrypty 1,2,3, nastepnie uruchomiony 2-krotnie jest skrypt 2 i jednokrotnie skrypt 1, a na samym końcu skrypt 3.

Ogólnie chciałbym aby w czasie jednoczesnego uruchomienia skrypty uzyskiwały dostęp do pliku wg kolejności, a nie w wersji 1-3-2 lub 3-1-2.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
zbig
post
Post #2





Grupa: Zarejestrowani
Postów: 144
Pomógł: 30
Dołączył: 5.05.2007
Skąd: Mannheim

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


Witam !

Jedyne co mi przychodzi do glowy jako pseudo optymalne rozwiaznie jest uzycie pcntl_fork.
Zasymulowanie Threadow ktore dostana dostep do pliku po zwolnieniu przez inny watek.

Ale zycze Ci wiele szczescia przy pracy php z watkami.

Pozdrawiam

Ten post edytował zbig 26.05.2011, 15:14:31
Go to the top of the page
+Quote Post
yevaud
post
Post #3





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


poszedlbym w http://memcachedb.org/memcacheq/
Go to the top of the page
+Quote Post
axxxon
post
Post #4





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

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


Dzięki za podane rozwiązania, są bardzo interesujące, niestety żadnego z nich w projekcie wykorzystać (IMG:style_emoticons/default/sciana.gif)
muszę działać na w miarę czystym php'ie plus odrobina mysql...
i mam pytanie - da się pobrać funkcja php'ową czas uruchomienia się samego skryptu z czegoś a'la logów systemowych...? tzn. nie ile on już działa tylko kiedy zaczął działać

Ten post edytował axxxon 26.05.2011, 16:01:33
Go to the top of the page
+Quote Post
CuteOne
post
Post #5





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


UP: to jest czysty PHP (IMG:style_emoticons/default/wink.gif) hmm może coś prostszego..

1. Plik do którego dostęp mają inne pliki niech nosi nazwę config.php
2. Dla każdego pliku, który ma do niego dostęp nadaj odpowiednie ID np.
aaa.php - id = 1
ccc.php - id = 2
bbb.php - id = 3

3. Utwórz plik pomocniczy np. kolejka.txt a w nim:
Kod
1

4. W każdym pliku dodaj:
  1. $file_id = 2; // dla każdego pliku inny ID - tak jak to wyżej napisałem
  2.  
  3. while(1) {
  4.  
  5. $handler = file_get_contents('kolejka.txt');
  6. if($handler == $file_id) {
  7.  
  8. $fid = ($file_id+1 > 3) ? 3 : $file_id+1; //ponieważ mamy 3 pliki max. ID nie może przekroczyć tej wartości
  9.  
  10. include 'config.php'; //includujemy plik
  11.  
  12. file_put_contents('kolejka.txt', $fid); // dzięki temu kolejny plik będzie mógł użyć config.php
  13. break;
  14. }
  15. else {
  16.  
  17. sleep(1); //czekamy sekundę i wznawiamy pętle
  18. }
  19. }


To samo można zrobić na bazie danych (IMG:style_emoticons/default/smile.gif)

ps. przed rozpoczęciem pętli dodaj set_time_limit(0); żeby ino skrypt nie przestał działać po 30 sekundach (IMG:style_emoticons/default/wink.gif)

Co do startu pliku.. na początku skryptu wstaw:

  1. file_put_contents('start.txt', time());


Ten post edytował CuteOne 26.05.2011, 17:07:02
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: 17.09.2025 - 23:40