Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]blokowanie wielokrotnego wykonywania skryptu
sazian
post 22.09.2015, 09:32:43
Post #1





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


Witam,
mam pewien skrypt który wykonuje się dosyć długo - nawet kilkanaście minut. Dlatego chciałem dodać zabezpieczenie przed wielokrotnym uruchamianiem skryptu żeby nie zabić serwera.
Napisałem coś w tym stylu(pisane z palca, więc mogą być literówki)
  1. $blokada=mysql_fetch_object(mysql_query('SELECT blokada FROM parametry '))->blokada;
  2. if($blokada+1800<time())
  3. {
  4. mysql_query('UPDATE parametry SET `blokada`='.time());
  5. sleep(20);
  6. echo '[OK]';
  7. mysql_query('UPDATE parametry SET `blokada`=0 ');
  8. }
  9. else
  10. {
  11. echo '[blokada]';
  12. }



generalnie kod działa jeśli go uruchomię przez konsole, czyli php plik.php. Problem pojawia się przy uruchamianiu przez przeglądarkę. Wtedy wygląda to tak
1)uruchamiam pierwszy skrypt
2)uruchamiam drugi skrypt ale nie dostaję komunikatu [blokada] tylko strona cały czas się wczytuje
3)kończy się wykonywanie pierwszego skryptu
4)wykonuje się skrypt drugi

czy ktoś może wie dlaczego skrypt zachowuje się tak dziwnie przy żądaniach przeglądarkowych ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Damonsson
post 22.09.2015, 09:53:27
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Odpalanie tego z przeglądarki to bardzo zły pomysł. Stwórz sobie jakiś observer w cronie co minutę, który będzie czekał na znak np. z przeglądarki i wykona wtedy skrypt. Zabezpieczenie ustawiłbym bazując na getmypid, będziesz miał to w czasie rzeczywistym zamiast Twojego szacowania $blokada+1800<time()
Go to the top of the page
+Quote Post
sazian
post 22.09.2015, 10:18:35
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


Dzięki za podrzucenie pomysłu, ale abstrahując od od samej metody blokowania problem jest w tym że skrypt jest wykonywany cronem ale muszę mieć również możliwość uruchomienia go przez przeglądarkę.
Skrypt generuje pewne pliki, czasami są to duże pliki i wtedy trwa to długo ale czasami jest to dużo małych plików. W drugim przypadku pracownicy muszą mieć możliwość generowania ręcznego dlatego że cronem za długo by to trwało.
Go to the top of the page
+Quote Post
KsaR
post 22.09.2015, 13:00:43
Post #4





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


  1. // u mnie to dziala >
  2. ini_set('max_execution_time',86400); # dzień
  3. set_time_limit(0); # -- bez limitu
  4. // gdyby jednak nie dzialalo, jak np. POST wyslany czy cos, to lepiej w echo cos za tym zwrocic. Nawet pusty znak. (Mi w takim wypadku przegladarka anulowala gdy nic nie zwrocilo z minute po wyslaniu POST-a).
  5.  
  6. // baza na plikach biggrin.gif
  7. if (@file_get_contents('./blokada.txt')+1800<time())
  8. {
  9. file_put_contents('./blokada.txt',time());
  10. sleep(20);
  11. echo '[OK]';
  12. file_put_contents('./blokada.txt',0);
  13. }
  14. else
  15. {
  16. echo '[blokada]';
  17. }


Ten post edytował KsaR 22.09.2015, 13:05:32


--------------------
Go to the top of the page
+Quote Post
sazian
post 22.09.2015, 17:54:05
Post #5





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


Cytat(KsaR @ 22.09.2015, 14:00:43 ) *
// u mnie to dziala >

nie myślałeś o robieniu kariery jako administrator smile.gif
swoją drogą ciekawa przypadłość że sql'em nie działaa z plikami tak wink.gif
Go to the top of the page
+Quote Post
KsaR
post 22.09.2015, 17:54:58
Post #6





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(sazian @ 22.09.2015, 18:54:05 ) *
nie myślałeś o robieniu kariery jako administrator smile.gif
swoją drogą ciekawa przypadłość że sql'em nie działaa z plikami tak wink.gif

Haha tongue.gif
--
Ano ciekawe biggrin.gif, bo te pierwsze 2 linijki (2-3) zmieniaja max. czas wykonania skryptu.

A ta baze na plikach tak z nudow dziabłem, bo dziwnie tak wszystko w mysql ladowac - zwlaszcza gdy bedzie zawsze 1 tabela z 1 rekordem(a co dopiero z 1 kolumna) tongue.gif

Ten post edytował KsaR 22.09.2015, 18:24:54


--------------------
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 Wersja Lo-Fi Aktualny czas: 14.07.2025 - 01:59