#php #ajax #sleep
#php #ajax #сон
Вопрос:
Складывается ли функция sleep() для всех пользователей, использующих example.php через ajax-запрос?
Если я помещу sleep (2) в example.php ; все ли пользователи подвергаются воздействию / складывают sleep()?
Я в основном хочу ограничить запросы на example.php , без использования небезопасного javascript, вместо этого внутри php. Спасибо
Комментарии:
1. Осталось еще 12 символов.
2. Если вы хотите ограничить запросы, не заставляйте пользователя ждать. Используйте какую-либо базу данных (плоский файл или что-то еще), которая отслеживает пользователей, и если пользователь слишком часто заходит на страницу за определенное время, заблокируйте их доступ. Но просто спящий режим страницы для ограничения запросов абсолютно неверен .
Ответ №1:
Нет. Это sleep(2)
повлияет только на одного пользователя. Однако, если вы хотите ограничить скорость, это все равно не лучший способ сделать это.
Теоретически злоумышленник может открыть 1000 одновременных запросов example.php
и за 2 секунды выполнить их 1000 раз. Если запросы перекрываются, это теоретически может выполняться столько раз в секунду, сколько захочет злоумышленник (конечно, до емкости сервера).
В качестве альтернативы вы можете захотеть взглянуть на что-то вроде общего алгоритма скорости передачи данных. Общая идея с ограничением скорости заключается в том, чтобы максимально эффективно отбрасывать запросы, которые превышают лимит.
Ответ №2:
Помещение sleep()
внутри PHP-файла повлияет на каждую загрузку этого PHP-файла, так что да, у всех пользователей, которые переходят к загрузке example.php
, независимо от того, как они это делают, страница будет отложена на 2 секунды.
Однако это не ограничивает запросы example.php
, а только приостанавливает их выполнение и возвращает пользователю.
Ответ №3:
Вы не можете ограничить HTTP-запросы к php-файлу на вашем сервере изнутри PHP в том смысле, что в запросе уже действительно поздно что-то ограничивать.
Проверьте с вашим HTTP-сервером или балансировщиком нагрузки перед ним, как вы можете ограничить запросы. Для этого существуют инструменты, и они обычно хорошо справляются. Чаще всего это гораздо лучшая работа, чем вы могли бы реализовать (наверняка с большой сложностью) изнутри PHP.
В любом случае, sleep
звучит как совершенно неправильная функция для ограничения запросов.
Я надеюсь, что это полезно и в какой-то степени отвечает на ваш вопрос.
Ответ №4:
Нет, это не ограничивает скорость запросов, которые выполняются example.php
. Это только задерживает его выполнение на несколько секунд.
Скорее, вы должны установить переменную на стороне сервера (желательно в базе данных), чтобы сохранить время последнего выполнения, а затем отфильтровать его по мере необходимости, сравнивая его с текущим временем. (даже добавление специализированного sleep(n)
для дроссельной заслонки).
Ответ №5:
Используйте мьютексы (flock) для достижения определенного уровня регулирования доступа к ресурсам. Используйте с осторожностью, так как это может стать узким местом вашего сайта, если на нем много трафика.