答案 0 :(得分:47)
它可以使用的一个地方是创建延迟。
假设您已经构建了一个使用curl
/ file_get_contents
来获取远程网页的抓取工具。现在你不想在短时间内用太多的请求轰炸远程服务器。因此,您在连续请求之间引入延迟。
sleep
以秒为单位获取参数,其朋友usleep
以微秒为单位获取参数,在某些情况下更合适。
答案 1 :(得分:27)
另一个例子:您正在运行某种批量处理,这会大量使用资源。也许你正在走9,000,000本书籍的数据库,并更新其中约10%的书籍。这个过程必须在当天中午运行,但是有很多更新要做,运行批处理程序会将数据库服务器拖到其他用户的爬行中。
因此,您修改批处理以提交1000个更新,然后sleep
提交5秒,以便数据库服务器有机会完成处理已备份的其他用户的任何请求。
答案 2 :(得分:23)
以下是我在其中一个项目中使用sleep
的摘要:
foreach($addresses as $address)
{
$url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
$result = file_get_contents($url);
$geo = json_decode($result, TRUE);
// Do stuff with $geo
sleep(1);
}
在这种情况下,sleep
可以帮助我防止被Google地图屏蔽,因为我向服务器发送了太多请求。
答案 3 :(得分:9)
老问题我知道,但使用u / sleep的另一个原因可能是您编写安全/加密代码时,例如身份验证脚本。几个例子:
修改强>
使用u / sleep来防止计时攻击不是一个好方法。您仍然可以在定时攻击中获取重要数据,您只需要更多样本来过滤掉您/睡眠中添加的噪音。
中找到有关此主题的更多信息答案 4 :(得分:1)
您可以使用sleep来暂停脚本执行...例如,延迟服务器端的 AJAX 调用或实现观察者。您也可以使用它来模拟延迟。
我也用它来延迟sendmail()&合。
有人使用use sleep()来防止DoS和登录brutefoces,我不同意'因此你需要添加一些检查以防止用户多次运行。
同时检查usleep。
答案 5 :(得分:1)
我最近在使用Google的Geolocation API时不得不使用它。循环中的每个地址都需要调用Google的服务器,因此需要一些时间来接收响应。我使用usleep(500000)
为所有事情提供了足够的时间。
答案 6 :(得分:1)
我通常不会将它用于提供网页,但它对命令行脚本很有用。
$ready = false;
do {
$ready = some_monitor_function();
sleep(2);
} while (!$ready);
答案 7 :(得分:1)
超级老帖,但我想我也会发表评论。 我最近不得不检查一个非常长的运行过程,创建了一些文件。所以我创建了一个迭代cURL函数的函数。如果我正在寻找的文件不存在,我会睡眠php文件,然后再检查一下:
function remoteFileExists() {
$curl = curl_init('domain.com/file.ext');
//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);
//do request
$result = curl_exec($curl);
//if request did not fail
if ($result !== false) {
//if request was ok, check response code
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 404) {
sleep(7);
remoteFileExists();
}
else{
echo 'exists';
}
}
curl_close($curl);
}
echo remoteFileExists();
答案 8 :(得分:1)
使用它的另一种方法:如果你想每分钟更频繁地执行一次cronjob。我使用以下代码:
sleep(30);
include 'cronjob.php';
我每分钟都会调用此文件和cronjob.php。
答案 9 :(得分:1)
这有点奇怪......文件传输限制。
在我们很久以前运行的文件传输服务中,文件是从10Mbps上行链路服务器提供的。为了防止网络陷入困境,下载脚本会跟踪一次下载的用户数,然后计算每个用户每秒可以发送的字节数。它会发送一部分这个数量,然后睡一会儿(我认为1/4秒)然后发送更多......等等。
通过这种方式,服务器以大约9.5Mbps的速度连续运行,没有上行链路饱和问题......并且总是动态调整下载速度。
我不会这样做,或者用PHP,现在......但它当时效果很好。
答案 10 :(得分:0)
其中一个应用是,如果我通过脚本向100多个客户发送邮件,那么这个操作最多需要1-2秒,因此大多数网站如hotmail和yahoo都认为它是垃圾邮件,所以为了避免这种情况,需要在每封邮件后使用一些延迟执行。
答案 11 :(得分:0)
其他:您正在测试一个发出异步请求的Web应用程序(AJAX调用,延迟图像加载......)
您正在本地测试它,因此只有一个用户(您)并且没有网络延迟,因此响应很快。
使用sleep
可以查看/测试加载和网络导致请求延迟时Web应用的行为。
答案 12 :(得分:0)
一个快速伪代码示例,您可能不想为单个事件获取数百万个警报电子邮件,但您希望脚本继续运行。
Coordinate