Как сделать повтор действия в php если элемент не найден?

Логика кода: поступил запрос: далее подбираем необходимые условия под запрос: если условия не найдены - через n-времени начинаем снова искать до тех пор пока не найдем то что ищем в бд.

Я думал реализовать это дело через условие, но понимаю то что функция info() там же и останется в условии и эффекта поиска не будет до тех пор пока не найдет нужное

Дополнительно:

Варнинг! Скорее всего вы придумали ОЧЕНЬ ОЧЕНЬ плохое решение и стоит вернуться на пару шагов назад

  • Сделай через цикл фор, что если N-раз сделан поиск, но ничего не нашло, то вылетает сообщение/уведомление.

    фор(условие){
    если(условие){
    Твой код
    }
    что-то ещё
    }

  • Дмитрий, Понимаю что это будет сильно нагружать систему но хочу попробовать реализовать такой элемент. Спасибо вам большое!
  • Артем Гартунг, лучше не надо реализовывать и пробовать. лучше сразу в ведро
  • Дмитрий, это нужно для начального этапа развития проекта (пара дней, неделя) далее применение этой системы будет сведена к нулю. Не для постоянного использования)
  • Артем Гартунг, смотрите - это решение выглядит как - а давайте ухерачимся на полной скорости об стену. Что вы собираетесь выяснить? Крепка стена? Или как больно будет? Не вопрос - я могу предположить наличие сего кода - запускаемого в каком нибудь демоне или еще чего, но судя по вопросу это у вас будет в web. И следовательно рекомендация - этот вариант в ведро. Можете описать проблему - вдруг будет куда лучшее решение.
  • Дмитрий, Игровой элемент (атака, защита) игрок нажимает атаку скрипт ищет другого пользователя который нажал защиту. Фоновая проверка тоже будет на то что бы игрок нажал лучше защиту если это необходимо и сейчас я исключаю тот вариант что пока игрок наводил курсор, кто то нажал первый и атаковал последний доступный элемент в бд
  • Артем Гартунг, вероятность использования будет минимальная, но что то подобное нужно реализовать
  • Артем Гартунг, ну дык на клиенте дергаете поиск несколько раз, пока не получите результат. Ибо клиент может обладать информацией когда надо это прекратить, а когда не надо - а сервер нет. Плюс к этому вы банально будете получать на клиенте ошибку таймаута через какое то время. Ибо люди писавшие вебсервера - понимают что скрипт висящий долго - это очень плохо, и стараются его рубить.
  • Решение приведёт к тому, что в лучшем случае у вас скрипт выйдет за лимиты по времени исполнения, в худшем случае у вас будет куча процессов php никогда не заканчивающихся.
    Уже и посетитель сайта забыл про поиск и ушёл заниматься делами, а у вас всё крутятся и крутятся скрипты, которые никогда не найдут в базе истину...

    Как можно реализовать лучше?
    1. Скрипт на клиенте js через ajax мог бы отправлять запросы каждые 15 секунд, php скрипт мог бы отработать, вернуть что ничего не найдено, завершиться.
    2. Вебсокеты, возможно.

  • Артем Гартунг, лучше бы сбрасывать тогда атаку через какое-то время с возможностью сделать новый ход. К тому же логика странная, я могу атаковать только тех, кто прожал защиту?
  • Дмитрий, То есть такая реализация приведет к ошибке тайм аута? Но опять же, если в цикле отдавать клиенту ответ (еще n-времени ищем), и фоново дальше продолжать искать, то тогда получится же обойти ошибку таймаута ?
  • Артем Гартунг, Конечно. Вы думаете апач или nginx будет вечно ждать когда у вас там php решит что пора? Ну теоретически вы можете это сделать отключив таймауты - но боюсь что через 3 минуты после этого у вас тупо сдохнет webserver или php-fpm. или бд. ну или весь сервер целиком. В принципе это единственное что вы можете проверить своим экспериментом это кто первый.

    фоново это как? грохнуть запрос веб сервера через какой нибудь fastcgi_finish_request() и продолжить искать? Ну в этом эксперименте можно будет точно сказать кто сдохнет первым - это будет php_fpm. Но и сразу возникает вопрос - как вы после этого клиенту сообщите о том что нашли?

  • Поразмыслил над замечаниями и над предложениями, в принципе, а если сделать выброс ошибки клиенту что мы не нашли, запустить таймер js на n-времени (пользователю выводить сколько времени идет поиск), а самим через определенный промежуток времени отправлять запросы, в js получается тот же самый вопрос уже setInterval задается
  • Ответы:

    через n-времени начинаем снова искать до тех пор пока не найдем то что ищем в бд.

    То есть если по каким то причинам данные в бд не поступят, то цикл будет вечным... Вам не кажется что тут что-т не правильно?

     

    Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.

     

      • Как сделать повтор действия в php если элемент не найден?Есть ответ
      • 09.04.2024
      Ответить

      Для повторения действия в PHP, если элемент не найден, можно использовать циклы, например, цикл while или do-while. Это позволит повторять определенные действия до тех пор, пока условие не будет выполнено.

      Пример использования цикла while для повторения действия, если элемент не найден:

      В данном примере, цикл while будет выполняться до тех пор, пока переменная $elementFound не станет равной true, что произойдет, когда элемент будет найден. Если элемент не будет найден, то цикл будет продолжать повторять действия в блоке else.

      Таким образом, использование циклов в PHP позволит повторять действия при необходимости, пока не будет достигнуто нужное условие.

    Оставить комментарий