Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Kilkukrotne wywołanie skryptu PHP w tle

Napisany przez: Azek 31.10.2019, 23:43:34

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. http://www.php.net/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?

Napisany przez: viking 1.11.2019, 06:26:32

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

Napisany przez: Tomplus 1.11.2019, 06:28:37

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.

Napisany przez: Azek 7.11.2019, 13:41:15

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ł.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)