Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX][SSH] Czas wykonania skryptu
Forum PHP.pl > Forum > PHP
MateuszRyaN
Czołem panowie,

Aplikacja do wysyłki wiadomości e-mail.
Jak puszczę wysyłkę poprzez SSH to wysyła wiadomości bez problemu, skrypt trwa z 15 minut (jest dodany 3s sleep po każdej wysyłce wiadomości)
Natomiast po uruchomieniu kampanii przez przeglądarke...wysyła zawsze tą samą ilość wiadomości 137... + 3s sleep... wychodzi na 411s czyli prawie 7 minut potem skrypt wisi...na iluśtam procentach ( w zależności od tego ile maili jest do wysłania).
Jak działa skrypt: Przycisk rozpocznij kampanie wysyła AJAXem żądanie o uruchomienie kampanii o konkretnym ID. Po każdej wysyłce maila zlicza mi wysłane maile i zapisuje ilość w pliku txt...na tej podstawie drugim ajaxem co 2s wysyłam zapytanie do tego pliku i obliczam procent wykonanej operacji. Noo nie ważne...generalnie działa.

Pytanie moje do was jak właściwie działa zapytanie przez AJAX, czy obowiązują go dyrektywy php.ini typu max_execution_time, max_input_time, memory_limit, max_post_size itp?? Czy zapytanie ajax można traktować jakbym po prostu wykonał zwykłego POSTa na plik (bo wtedy logiczne że mogłoby blokować ze względu na jakieś ograniczenia serwera)questionmark.gif Co może być przyczyną, że skrypt leci po SSH normalnie a przez przeglądarke łapie zwieche i wisi...

Na serwerze jest ustawione
  1. max_input_time = 600
  2. max_execution_time = 30


P.S. Dodam że nie generuje żadnego error_loga...nic...
W celu debugowania mam uruchomione:
  1. php_flag display_startup_errors on
  2. php_flag display_errors on
  3. php_flag html_errors on
  4. php_flag log_errors on
  5. php_flag ignore_repeated_errors off
  6. php_flag ignore_repeated_source off
  7. php_flag report_memleaks on
  8. php_flag track_errors on
  9. php_value docref_root 0
  10. php_value docref_ext 0
  11. php_value error_reporting -1
  12. php_value log_errors_max_len 0
  13. php_value error_log /php_errors.log

Ale pusto...

Prosze o jakąś pomoc/wskazówkę.
Pilsener
Jest istotna różnica pomiędzy odpalaniem aplikacji PHP z poziomu klienta (z linii komend) a przez np. Apacza - z poziomu klienta np. nie masz tablicy $_SERVER, nie masz zmiennych środowiskowych z .htaccess i tak dalej. Więcej nie da się powiedzieć bo nie wiem na jakim frameworku stoi aplikacji ani jak działa.
MateuszRyaN
Nie jest postawiony na żadnym frameworku.
Czysty php. Jak potrzebowałbyś więcej informacji to pytaj.

zmieniłem na chwile
max_input_time = -1
max_execution_time = 0
ale za wiele nie pomogło...

Kurcze co może się takiego dziać po 7 minutach...że łapie zwieche??
Może jakaś zmienna zapycha pamięć? Porobić unsety wszędzie gdzie się da?
Jak to sprawdzić ?
Pyton_000
A co developers tools na to?
Pilsener
Po 7 minutach np. serwer może przerywać wykonywanie się skryptu.
Nie wiem jakiego używasz serwera i jak jest skonfigurowany.
Spróbuj porównać to:
Cytat
php -i


z tym:


I nie powinno się w PHP robić takich rzeczy, bo to nie jest odpowiednia technologia, powinno się maile kolejkować a następnie wysyłać porcjami co jakiś czas przez CRONa np:
Cytat
php app/console swiftmailer:spool:send --message-limit=10 --env=prod

Męczysz serwer niepotrzebnymi requestami i zapewne ten się buntuje.
MateuszRyaN
Aaa no i tu już jest jakiś trop. Zmienić metodę wysyłki. Gdybym puszczał to przez crona, mam rozumieć, że będzie się to wykonywać regułami podobnymi do polecenia z konsoli SSH...bez ingerencji apacha i jego dyrektyw?
Pyton_000
tak.

Generalnie możesz zrobić system kolejkowania. Tu masz libki:

https://github.com/php-enqueue/enqueue-dev
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.