PHP sleep()是否为多个用户加起来?

时间:2011-10-24 18:14:51

标签: php ajax sleep

sleep()函数是否通过ajax请求使用example.php为所有用户加起来?

  

如果我把sleep(2)放在example.php中;让所有用户都被捕获/加起来睡觉()?

我基本上想限制example.php的请求,而不是使用不安全的javascript,而是在php中。感谢

5 个答案:

答案 0 :(得分:2)

sleep()置于PHP文件中会影响该PHP文件的每次加载,所以是的,所有加载example.php的用户,无论他们如何操作,都会使页面延迟2秒。

但是,这不会限制example.php的请求,只会暂停执行并返回给用户。

答案 1 :(得分:2)

没有。 sleep(2)只会影响单个用户。但是,如果你想进行速率限制,这仍然不是一个很好的方法。

理论上,恶意用户可以向example.php开放1,000个并发请求,并在2秒内执行1,000次。如果请求是重叠的,理论上这可以像攻击者想要的那样每秒执行多次(当然是服务器的容量)。

作为替代方案,您可能希望查看generic cell rate algorithm之类的内容。速率限制的一般想法是尽可能有效地丢弃超出限制的请求。

答案 2 :(得分:0)

您不能从PHP内部将HTTP请求限制到服务器上的php文件,这意味着它已经在实际限制某些内容的请求中已经很晚了。

检查您的HTTP服务器或前面的负载均衡器,如何限制请求。存在这样的工具,他们通常做得很好。大多数情况下,这是一项比你能够实现的更好的工作(当然,复杂性很高)来自PHP内部。

无论如何,sleep听起来像是一个完全错误的限制请求的功能。

我希望这有用,并在某种程度上回答你的问题。

答案 3 :(得分:0)

不,它不会限制example.php执行的请求的速率。它只会延迟执行几秒钟。

相反,您应该设置服务器端变量(最好是在数据库上),以存储上次执行的时间,然后根据需要通过将其与当前时间进行比较来过滤它。 (甚至添加专门的sleep(n)来节流)。

答案 4 :(得分:0)

使用互斥 (flock)来实现一定级别的资源访问监管。请谨慎使用,因为如果交通繁忙,它可能会成为您的网站瓶颈。