Как правильно делать рассылку сообщения пользователям бота Telegram (PHP)?

В боте 130 пользователей. Кто-то заблокировал бота, кто-то нет. Все ID пользователей хранятся в базе MySQL.
Хочу сделать рассылку сообщения всем активным пользователям. Для этого создал sendall.php со следующим кодом:
foreach($db->query("SELECT user_id FROM `users`") as $row){
	$userId = $row['user_id'];
	try
	{
		$bot->sendMessage($userId,$news, 'Markdown', false, null, getKeyboard(_t($userId,'gmv'),_t($userId,'gmg')));
		echo "userId = ".$userId."<br>";
	}
	catch (Exception $e)
    {
		echo "userId = ".$userId." ".$e->getMessage()."<br>";
    }
    sleep(1);
    $date = date("Y-m-d H:i:s");
    echo "date = ".$date."<br>";
}


И чтобы сделать рассылку, просто открываю эту страницу в браузере https:// <домен>/sendall.php
Поскольку после каждой отправки сообщения поставил ожидание в 1 сек, то скрипт выполняется долго, и в итоге натыкаюсь на таймаут соединения, и скрипт не доходит до конца.
Как правильно всё-таки сделать рассылку на php?
  • Вопрос задан
  • 781 просмотр
Пригласить эксперта
Ответы на вопрос 3
@Nc_Soft
Это надо запускать не через браузер, а в консоле.
Ответ написан
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Сделать распараллеливание задач через очереди (RabbitMQ/ Kafka)
Ответ написан
@bkosun
Вообще, конечно, правильно было бы использовать очереди сообщений, но для конкретно этой задачи будет достаточно оптимизировать скрипт.

Используйте set_time_limit или надстройку max_execution_time в php.ini, чтобы убрать ограничение времени выполнения скрипта:

set_time_limit(0);
ИЛИ
ini_set('max_execution_time', 0); // не сработает, если включен безопасный режим


php.net/manual/ru/function.set-time-limit.php
php.net/manual/ru/info.configuration.php#ini.max-e...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы