2011-03-08 98 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