Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
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


--------------------
Flash Flex PHP JAVA RED5 http://www.easyweb24.net
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ć 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 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 smile.gif

ps. przed rozpoczęciem pętli dodaj set_time_limit(0); żeby ino skrypt nie przestał działać po 30 sekundach 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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 12:39