Выполнение кода после вывода страницы. Как?
Выполнение кода после вывода страницы. Как?
Здравствуйте, друзья! Задача — вести лог посетителей страницы IP адресом и т.д. Но перед рендером нагружать сайт этой задачей неохота, ведь это отразится на скорости генерации страницы. Как запустить код моего счетчика после вывода страницы на экран? Спс!
Re: Выполнение кода после вывода страницы. Как?
Что именно нагрузит? Один запрос в базу?
Re: Выполнение кода после вывода страницы. Как?
Этот запрос ситуативно может быть связан с отправкой email. Значительно увеличивает время загрузки страницы. Пробовал afterAction, но... время загрузки возрастает ощутимо.
Нужно, чтобы страница уже отобразилась, а потом уже и email отправлялся.
Нужно, чтобы страница уже отобразилась, а потом уже и email отправлялся.
Re: Выполнение кода после вывода страницы. Как?
Вы вообще понимаете как работает php? Нет такого после отображения страницы.
Например, можете создать 1 запись в логе, а потом кроном уже что-то делать раз в н минут.
Например, можете создать 1 запись в логе, а потом кроном уже что-то делать раз в н минут.
Re: Выполнение кода после вывода страницы. Как?
Через AJAX запрос после загрузки сделайте.
Re: Выполнение кода после вывода страницы. Как?
самое нормальное это как вам написали выше: одну запись в базу, а дальше пусть крон дергает вашу задачу которая делает что вашей душе угодно ...
все зависит от задачи ... вы бы описали подробнее ...
все зависит от задачи ... вы бы описали подробнее ...
это ведь вообще пустяк ...лог посетителей страницы IP адресом
Re: Выполнение кода после вывода страницы. Как?
Да пустяк, и я его сделал, просто момент отправки почты тормозит страницу. Задача простая - при заходе на определённые избранные страницы отправляется уведомление о заходе. Сейчас это работает на ajax, но я попробовал в код впихнуть, страница стала грузиться медленнее. Думаю, с кроном всё-таки сделаю.
Re: Выполнение кода после вывода страницы. Как?
отправку почты в очередь, и никаких тормозов и проблем
Re: Выполнение кода после вывода страницы. Как?
Вам надо навеситься на событие \yii\web\Response::EVENT_AFTER_SEND. К этому моменту данные уже должны быть отправлены в браузер.
Если используется fpm то можно воспользоваться http://php.net/manual/ru/function.fastc ... equest.php
Re: Выполнение кода после вывода страницы. Как?
На мой взгляд для начала слать почту на каждый чих не корректно во вторых вопрос как вы это делаете - если через реальный смтп конект то это конечно - запретить, если у вас есть локальный почтовик то тут тормозов быть не должно на то они почтовики и придуманы (и у них есть свои очериди и т.п.)
Второй момент вообще смысл подобного действия отправлять почтой лог - лог должен писаться в лог в Yii есть масса логеров которые могут писать и файл и в базу и даже слать в почту и будьте уверены будут это делать гораздо коррректнее чем вы придумаете что то свое
Но если уж никак не подходит - то всегда можно сделать вставку некоего однопиксельного гиф а урл по нему обрабатывать отдельным кодом
Второй момент вообще смысл подобного действия отправлять почтой лог - лог должен писаться в лог в Yii есть масса логеров которые могут писать и файл и в базу и даже слать в почту и будьте уверены будут это делать гораздо коррректнее чем вы придумаете что то свое
Но если уж никак не подходит - то всегда можно сделать вставку некоего однопиксельного гиф а урл по нему обрабатывать отдельным кодом
Re: Выполнение кода после вывода страницы. Как?
"Видимо, так и оставлю, если не будет более удобных предложений."
Это предложение, исходя из Ваших слов.
А так у меня через очереди вопрос решен с оправкой почтовых сообщений. (но это нужно настраивать через SSH на сервере, чтобы обработчик постоянно висел в памяти и обрабатывал очередь).
Это предложение, исходя из Ваших слов.
А так у меня через очереди вопрос решен с оправкой почтовых сообщений. (но это нужно настраивать через SSH на сервере, чтобы обработчик постоянно висел в памяти и обрабатывал очередь).
Re: Выполнение кода после вывода страницы. Как?
можно в базу писать задачи и кроном тащить. Костыль, криво, но, в пределах шареда без ссш пойдетЙож писал(а): ↑2017.11.11, 14:49 "Видимо, так и оставлю, если не будет более удобных предложений."
Это предложение, исходя из Ваших слов.
А так у меня через очереди вопрос решен с оправкой почтовых сообщений. (но это нужно настраивать через SSH на сервере, чтобы обработчик постоянно висел в памяти и обрабатывал очередь).
Re: Выполнение кода после вывода страницы. Как?
Это действительно интересно. Спасибоchesar писал(а): ↑2017.11.11, 11:05
Вам надо навеситься на событие \yii\web\Response::EVENT_AFTER_SEND. К этому моменту данные уже должны быть отправлены в браузер.
Если используется fpm то можно воспользоваться http://php.net/manual/ru/function.fastc ... equest.php
Re: Выполнение кода после вывода страницы. Как?
Последний раз редактировалось urichalex 2017.11.13, 21:14, всего редактировалось 1 раз.
Re: Выполнение кода после вывода страницы. Как?
Не могу просмотреть, не расшарено.urichalex писал(а): ↑2017.11.12, 21:02 Как так?
https://www.dropbox.com/preview/vokoscr ... -56-02.mkv
Код: Выделить всё
\yii\base\Event::on(\yii\web\Response::class, \yii\web\Response::EVENT_AFTER_SEND, function($event) {
//К этому моменту данные уже отправлены в браузер. Страница сформирована. Но соединение ещё не сброшено.
if(function_exists('fastcgi_finish_request')) {
//Если fpm то сбрасываем соединение. Всё клиент дальше сам по себе, сервер сам по себе.
fastcgi_finish_request();
}
//...
});
Re: Выполнение кода после вывода страницы. Как?
2b||!2b Just read the instructions