2011-03-08 33 views
0

我有一個腳本,它作爲我的模塊的一部分在Drupal中運行。 在本模塊中,我使用cURL函數從遠程網站請求html頁面,然後解析html內容並將其寫入我的數據庫。 我希望在我對遠程服務器的每個請求之間有一段延遲,因此我在我的PHP腳本中添加了sleep()PHP中的睡眠命令返回非零值

function get_me_data() 
{ 
    for(15 iterations) 
    { 
    $html = file_get_contents($search_url); 
    //parse html contents 
    $delay = mt_rand($interval1,$interval2); // interval1 = 0 , interval2=30 
    $retval = sleep($delay); 
    } 
} 
  1. 功能get_me_data()由cron作業(hook_cron在.module文件中實現)發起。
  2. 我也嘗試刷新使用睡眠命令之前的流。 使用flush(); ob_flush();fflush(filepointer); ob_implicit_flush(true)

恰巧,後4-5次迭代,sleep()命令返回非零值。 當sleep()被稱爲

時,腳本會在下一次迭代中中止。如果我忽略了此處的任何方面sleep(),請告訴我。 我使用,PHP版本5.3 &的Drupal 6

回答

2

按照文檔http://php.net/manual/en/function.sleep.php可以返回非零值。

如果調用被信號中斷,sleep()返回一個非零值。在Windows上,此值始終爲192(Windows API中WAIT_IO_COMPLETION常量的值)。在其他平臺上,返回值將是剩餘的睡眠時間。

在睡眠中的評論使用time_sleep_until(),因爲它不會被打斷。

+0

感謝您的輸入。我也使用了time_sleep_until()。我注意到的一件奇怪的事情是,當我在我的drupal localhost安裝上運行這些腳本時,sleep()和time_sleep_until()都失敗。 – rachel 2011-03-08 13:12:50

+0

我已經使用time_sleep_until()驗證了我的服務器上的php腳本。經過兩次迭代後,我在函數調用之前看到一個調試語句,然後沒有調試語句。 – rachel 2011-03-08 13:19:21

+0

@rachel你在本地主機/服務器上運行什麼操作系統? – Jacob 2011-03-08 23:40:39