Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kilkukrotne wywołanie skryptu PHP w tle
Azek
post 31.10.2019, 23:43:34
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 28.12.2011

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


Mam następujący problem: użytkownik chce wygenerować mapę na podstawie posiadanych danych (konkretnie rekord w MySQL). Na stronie klika przycisk "Wygeneruj mapę". Żądanie zostaje zapisane w bazie MySQL jako do zrobienia. Następnie jest uruchamiany skrypt, który ma za zadanie pobrać żądania z bazy, wysłać na ich podstawie odpowiednio przygotowane zapytanie do zewnętrznego serwisu, poczekać na odpowiedź (w granicach 5-15 sek.), otrzymane dane przemielić do pliku, plik zapisać na serwerze, a link do pliku zapisać do rekordu żądania, tak aby użytkownik mógł go ściągnąć w dogodnym czasie.

Wszystko działa dopóki mam jedno żądanie w bazie. Jeśli żądań jest do zrobienia więcej, zajmują one za dużo czasu niż skrypt ma dozwolone (ograniczenia nie mogę zdjąć, jest odgórnie ustawione). Zastanawiałem się nad
  1. header(...)
, ale w przypadku zapytania przez AJAX lub cron nie ma sensu. Cron co 10 min. w celu sprawdzenia i ewentualnego wykonania kolejnego żądania też mija się z celem, bo 1) znakomita większość czasu nie będzie nic do zrobienia, 2) każde wywołanie cron to wysłanie maila z raportem(czytaj zawalenie skrzynki).

Czy ktoś się spotkał z podobnym problemem? Jak wywoływać kolejny raz skrypt, tak aby nie przekroczyć limitu czasowego?
Go to the top of the page
+Quote Post
viking
post 1.11.2019, 06:26:32
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Wrzucaj takie zadania do kolejek (typu rabbitmq) a użytkownikowi możesz generować link który będzie dopiero aktywny za jakiś czas.


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 1.11.2019, 06:28:37
Post #3





Grupa: Zarejestrowani
Postów: 1 832
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


Ustaw limit czasowy na większy.

Zmień serwer na lepiej wydajny.

Użyj rozwiązań chmurowych.

Podziel wywołanie CRON raportu na kilka plików, a potem przy ostatnim wywołaniu, zsumuj pliki i wyślij raport.
Zrób zadanie w CRON które ma sprawdzać czy może wysyłać email gdy zadanie z generowaniem raportu ustawi flagę w bazie: "TerazWyslijEmail" czy jakoś tak.
Go to the top of the page
+Quote Post
Azek
post 7.11.2019, 13:41:15
Post #4





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 28.12.2011

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


Cytat(Tomplus @ 1.11.2019, 07:28:37 ) *
Ustaw limit czasowy na większy.

Widać, że ktoś niedokładnie zapoznał się z treścią posta. Nie, nie mogę ustawić limitu na większy, jest zablokowana funkcja na hostingu.
Póki co, użytkownicy sami wywołują skrypt za pomocą AJAX, który działa sobie w tle i nie jest wrażliwy na zamknięcie strony/ przeglądarki. Zobaczę jak się rabbitmq będzie sprawował.
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: 18.04.2024 - 06:12