Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Супер Долгое выполнение скрипта (https://javascript.ru/forum/jquery/84966-super-dolgoe-vypolnenie-skripta.html)

Белый шум 19.02.2023 20:29

Цитата:

Сообщение от BorisJe
Пользователю показать страницу что все ок. А дальше все просто само отрабатывает. Результат успеха не важен.

https://dron.by/post/kak-zakryt-soed...e-skripta.html

В начале скрипта поставить код с этой страницы (первые 20 строк), заменив 7-ю строку на echo "Ok";
И убрать строку echo $res; в конце вашего скрипта.

BorisJe 20.02.2023 09:16

Цитата:

Сообщение от Белый шум (Сообщение 550774)
https://dron.by/post/kak-zakryt-soed...e-skripta.html

В начале скрипта поставить код с этой страницы (первые 20 строк), заменив 7-ю строку на echo "Ok";
И убрать строку echo $res; в конце вашего скрипта.

Спасибо за объяснение и код
Не приходят формы на почту админу, и так и так попробовал

Белый шум 20.02.2023 13:14

Цитата:

Сообщение от BorisJe
Не приходят формы на почту админу, и так и так попробовал

Вот тут пишут - https://bugs.php.net/bug.php?id=60586#1639418517 - что ignore_user_abort(true); не работает для FastCGI в связке с IIS, а возможно и с другими серверами тоже.

Значит я вижу три выхода:
- либо менять протокол взаимодействия с веб-сервером и/или сам веб-сервер;
- либо ставить локально почтовый сервер (для быстрого приёма письма), который будет затем перенаправлять почту куда надо;
- либо вариант, который предложил Nexus.

BorisJe 20.02.2023 13:46

Цитата:

Сообщение от Белый шум (Сообщение 550780)
Вот тут пишут - https://bugs.php.net/bug.php?id=60586#1639418517 - что ignore_user_abort(true); не работает для FastCGI в связке с IIS, а возможно и с другими серверами тоже.

Значит я вижу три выхода:
- либо менять протокол взаимодействия с веб-сервером и/или сам веб-сервер;
- либо ставить локально почтовый сервер (для быстрого приёма письма), который будет затем перенаправлять почту куда надо;
- либо вариант, который предложил Nexus.


сейчас в Joomla стоит phpMail, когда настраивал smtp вообще не приходило

Белый шум 20.02.2023 14:08

Цитата:

Сообщение от BorisJe
сейчас в Joomla стоит phpMail, когда настраивал smtp вообще не приходило

Это не имеет значения. Под локальным почтовым сервером я имел ввиду postfix или exim, либо другой MTA. Его настройка в такой роли нетривиальна, так что придётся заплатить кому-нибудь знающему. Пэтому лучше выбрать что-то из оставшихся двух вариантов.

BorisJe 20.02.2023 15:04

А что если: сервак должен получать запрос, запускать в отдельном потоке отправку письма, и отвечать клиенту что всё ок
т.е. фронт отправить запрос и получит ответ за секунду.
А письмо отправлять сервер будет уже столько сколько надо
т.е. фронт должен дождаться ответа что запрос на сервер отправлен после чего сделать редирект

пхп работает с потоками?

Белый шум 20.02.2023 17:28

По потокам не подскажу, но можно ещё запустить внешний фоновый процесс через exec и его аналоги:
https://php.ru/forum/threads/zapusk-...9/#post-489196
https://stackoverflow.com/questions/...nswer-14556052
https://ru.stackoverflow.com/questio...BD%D0%B8%D1%8F

Тут ключевое слово - фоновый. Иначе основной скрипт будет ждать завершения дочернего процесса.

Как вариант, можно так запускать не напрямую консольный php-скрипт, а дёргать УРЛ через curl или wget:
exec("wget -b -o /dev/null 'https://javascript.ru/?s=subject&text=some text для примера'");
^^тут часть >/dev/null & не нужна, т.к. мы указали ключ -b для wget, благодаря чему он сам переходит в фон; а ключом -o мы сказали что и вывод с этой страницы сохранять не нужно.

Nexus 20.02.2023 17:58

Цитата:

Сообщение от BorisJe
А что если: сервак должен получать запрос, запускать в отдельном потоке отправку письма, и отвечать клиенту что всё ок
т.е. фронт отправить запрос и получит ответ за секунду.
А письмо отправлять сервер будет уже столько сколько надо
т.е. фронт должен дождаться ответа что запрос на сервер отправлен после чего сделать редирект

Вы к Джумле хотите брокер сообщений с парой консьюмеров сбоку прибить?
Мне кажется для приложения на Joomla это как-то слишком серьезно что ли)

Попробуйте просто отправить ответ пользователю, что "все хорошо" и продолжайте выполнять отправку сообщений:
https://gist.github.com/bubba-h57/32593b2b970366d24be7
https://stackoverflow.com/questions/...nnection-early

Цитата:

Сообщение от BorisJe
пхп работает с потоками?

Да, работает, но я не уверен, что поток останется "жив" после завершения работы его "родителя".

Белый шум 20.02.2023 18:22

Цитата:

Сообщение от Nexus
Попробуйте просто отправить ответ пользователю, что "все хорошо" и продолжайте выполнять отправку сообщений:

У него не работает ignore_user_abort(true); - скрипт завершается при отключении клиента. Багрепорт - https://bugs.php.net/bug.php?id=60586#1639418517

BorisJe 23.02.2023 19:43

а что если так?
$(document).ready(function(){
			$('.quote_form').click(function(){
			  // get text field value
			  var userName = $('.myField').val();
			  var emailAddress = 'myemail@server.com';
			  // ajax request and response in function
			  var jqxhr = $.ajax({
				url: 'sendMail.php', 
				type: 'POST',
				data: jQuery('#quote_form').serialize(),
				src: window.location.href,
				success:function(responseAnyNameHere) {
				  $('.responseArea').html(responseAnyNameHere);
				},
				statusCode:{
				  404:function(){
					//$('.error').html("Page not found!");
					alert( "file not found" );
				  }
				}
			  }).done(function() {
			  alert( "success" );
			  }).fail(function() {
			  alert( "error" );
			  }).always(function() {
			  alert( "complete" );
			});
		}}));


Только где то ошибка


Часовой пояс GMT +3, время: 02:18.