回答
它找到用途的一個地方是創建一個延遲。
比方說,你已經構建了一個履帶,使用curl
/file_get_contents
來獲取遠程頁面。現在,您不想在短時間內以太多的請求轟炸遠程服務器。所以你在連續的請求之間引入一個延遲。
sleep
在幾秒鐘內取得參數,其朋友usleep
以微秒爲參數,在某些情況下更適合。
這裏是我如何在我的項目之一使用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
幫助我避免被攔截的谷歌地圖,因爲我發送太多的請求到服務器。
編輯:這是codaddict在說什麼的例子。
您可以使用sleep來暫停腳本執行...例如延遲服務器端的AJAX調用或實現觀察者。您也可以使用它來模擬延遲。
我使用它也延遲sendmail()& co。 。
有人使用sleep()來防止DoS和登錄brutefoces,我不同意'因爲你需要添加一些檢查來防止用戶多次運行。
還請檢查usleep。
另一個示例:您正在運行某種批量過程,該過程大量使用資源。也許你正在走900萬本書名的數據庫,並更新其中約10%的書目。這個過程必須在一天中間運行,但是有很多更新需要完成,以至於運行批處理程序會拖動數據庫服務器以抓取其他用戶。
因此,您修改批處理過程以提交1000次更新,然後sleep
5秒鐘,以使數據庫服務器有機會完成處理已備份的其他用戶的任何請求。
我最近在使用Google的Geolocation API時不得不使用它。每個循環中的地址都需要調用Google的服務器,因此需要一點時間才能收到響應。我使用usleep(500000)
爲所有涉及的時間足夠。
我通常不會使用它來提供網頁,但它對命令行腳本很有用。
$ready = false;
do {
$ready = some_monitor_function();
sleep(2);
} while (!$ready);
超級老帖子,但我想我也會評論。 我最近必須檢查一個非常長的運行過程,它創建了一些文件。所以我做了一個遍歷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();
老問題,我知道,但另一個原因是使用U /睡眠,可當你正在編寫安全/加密代碼,如驗證腳本。幾個示例:
- 您可能希望通過有目的地減緩登錄腳本,特別是在幾次失敗嘗試後降低潛在的強力攻擊的有效性。
- 此外,您可能還希望在加密過程中添加人爲延遲以減輕對timing attacks的影響。我知道你會用像PHP這樣的語言編寫如此深入的加密代碼的機會很渺茫,但我認爲仍然有效。
最佳答案恕我直言 – Julian 2014-03-20 14:14:50
它的一個應用是,如果我通過腳本向100多個客戶發送郵件,那麼這個操作最多需要1到2秒鐘的時間,因此像hotmail和yahoo這樣的大多數網站都認爲它是垃圾郵件,所以避免這種情況,我們需要在每封郵件後執行一些延遲。
在別人:你正在測試一個Web應用程序,使ayncronous請求(AJAX調用,懶圖像加載,...)
你是在本地測試它,以便反應是直接由於只有一個用戶(你)並且沒有網絡延遲。
使用sleep
可讓您查看/測試負載和網絡導致請求延遲時Web應用程序的行爲。
一個快速僞代碼示例,您可能不想爲單個事件獲取數百萬條警報電子郵件,但希望腳本繼續運行。
if CheckSystemCPU() > 95
SendMeAnEmail()
sleep(1800)
fi
PHP語法最近真的發生了變化......:P – alex 2016-11-22 08:04:44
LOL我知道有人會說些什麼:-)哈哈 – 2016-11-22 20:30:04
另一種使用方法:如果你想在每分鐘更頻繁地執行一次cronjob。我使用下面的代碼:
sleep(30);
include 'cronjob.php';
我把這個文件和cronjob.php每分鐘調用一次。
這有點奇怪......文件傳輸調節。
在我們很久以前運行的文件傳輸服務中,文件是從10Mbps上行鏈路服務器提供的。爲了防止網絡陷入停滯,下載腳本會跟蹤有多少用戶同時下載,然後計算每個用戶每秒可以發送多少字節。它會發送這個數額的一部分,然後睡一會兒(我認爲是1/4秒)然後發送更多...等等。
通過這種方式,服務器以9.5Mbps的速度連續運行,沒有上行鏈路飽和問題......並且總是動態地調整下載速度。
我不會這樣做,或者在PHP中,現在...但它在當時效果很好。
- 1. toContain()的實際用途是什麼?
- 2. 什麼是System.Transactions的實際用途?
- 3. Socket.ExclusiveAddressUse的實際用途是什麼?
- 4. Android NDK的實際用途是什麼?
- 5. array_diff_uassoc的實際用途是什麼?
- 6. jQuery的實際用途是什麼?
- 7. 什麼是stream_wrapper_register在php中的實際用途?
- 8. ES5提供的新方法的實際用途是什麼?
- 9. JUnit測試用例中「失敗」的實際用途是什麼?
- 10. PHP睡眠但在睡眠前執行什麼
- 11. 什麼是iOS的睡眠功能
- 12. Observable.never()函數的實際用途是什麼?
- 13. <sparkle:ReleaseNotesLink>的實際用途是什麼?
- 14. 雙向覆蓋「bdo」的實際用途是什麼?
- 15. Lua在Mac OS X中的一些實際用途是什麼?
- 16. .PDB文件的實際用途是什麼?
- 17. `git fetch`命令的實際用途/目標是什麼
- 18. 受保護構造函數的實際用途是什麼?
- 19. Callback類模板的實際用途是什麼?
- 20. '-x'參數的實際用途是什麼?
- 21. <dfn>標籤的實際用途是什麼?
- 22. resx文件的實際用途是什麼?
- 23. android中.so文件的實際用途是什麼?
- 24. 受保護繼承的實際用途是什麼?
- 25. getchar和putchar的實際用途是什麼?
- 26. 成員隱藏,什麼是它的實際用途
- 27. 該嵌套類的實際用途是什麼?
- 28. 「複製」構造函數的實際用途是什麼?
- 29. 可掛載式發動機的實際用途是什麼?
- 30. 互聯網上mac地址的實際用途是什麼?
我唯一能想到的就是,除非在網絡服務器上使用php來做其他事情。 – Frank 2010-10-14 06:56:27
更一般地說:*請求限制*,包括傳入和傳出。 – deceze 2010-10-14 06:57:42
上傳文件到服務器後,我使用'sleep'來確保文件完全上傳。沒有它,腳本就會失敗。 – VSG24 2016-09-22 22:35:53