@crack_user

Почему скрипт выполняется не до конца?

В базе около 9к юзеров, вот скрипт для рассылки в ТГ боте.
public function forwardSend()
    {
        ini_set ( 'max_execution_time', 0);
        global $data, $user;
        $this->app->sendMessage('Вы отправили рассылку');
        $user->updateUser(['peremen' => 0]);

        $users = $user->getAll();
        foreach($users as $us)
        {
            $this->app->chatId = $us['user_id'];
            $this->app->forwardMessage($data['message']['chat']['id'], $data['message']['message_id']);
            sleep(1);
        }
    }


При выводе echo ini_get('max_execution_time') - выводит 0, насколько мне известно "0" это бесконечно. Пробовал также указывать 15к секунд, но всё равно так и так рассылка приходит только 1000 пользователям. ТГ никаких ошибок не выдает. В чем может быть проблема?
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
рассылка приходит только 1000 пользователям.
Если прям ровно 1000, очевидно это ограничение ТГ.

ТГ никаких ошибок не выдает.
Как это проверяется?
$res = $this->app->forwardMessage(...)очевидно что-то возвращает, подозреваю ответ в виде саксесс/фэйл, но вы его нигде не используете.

Посмотрел доку - он возвращает объект Message в случае успеха, и код ошибки в случае неудачного запроса. Проверяйте $response->getMessageId(); для определения удачного запроса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@66demon666
Сетевой админ, АТС-админ
У вас 0 обработок ошибок в коде, оберните все это хозяйство хотя бы в try catch и пишите в лог, скорее всего телега отбивает по частоте запросов
Ответ написан
@Vitsliputsli
никаких ошибок не выдает... Там просто в моменте обрывается и всё

Запускаете дебаггер и смотрите, что происходит. Если нельзя воспользоваться дебаггером, значит логируйте шаги выполнения, увеличивайте детализацию логирования пока не локализуете проблему.

Без этой информации можно лишь гадать, варианты:
1) скрипт выполняется корректно (например, у вас не 8к записей, читаете не из той БД, не с теми параметрами и т.п.);
2) происходит ошибка, но мы ее не видим (смотрим не в тот лог, гдето присобачен обработчик, который перехватывает ошибки и подавляет их сообщения, и т.п.);
3) скрипт действительно аварийно прерывается без каких либо сообщений об ошибках (значит чтото дает команду на это, если самовредительством не занимались, то остается только oom killer, но вряд ли у вас безлимит на память php, и то что закончилась память вы бы заметили, так что очень маловероятно);
4) неведомая хрень (баги в php, в ОС и хз что еще, еще менее вероятно, чем п3).
Ответ написан
Ваш ответ на вопрос

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

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