PHP 中的睡眠命令返回非零

发布于 2024-10-20 14:14:53 字数 772 浏览 2 评论 0原文

我有一个脚本,它作为 Drupal 模块的一部分运行。 在这个模块中,我使用 cURL 函数从远程网站请求 html 页面,然后解析 html 内容并将其写入我的数据库。 我希望在对远程服务器发出的每个请求之间有一个延迟,因此我在 PHP 脚本中添加了 sleep()

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. 我还尝试在使用 sleep 命令之前刷新流。 使用flush(); ob_flush();fflush(文件指针); ob_implicit_flush(true)

碰巧在 4-5 次迭代之后,sleep() 命令返回非零值。 当调用 sleep() 时,脚本会在下一次迭代中中止

如果我在这里忽略了 sleep() 的任何方面,请告诉我。 我正在使用 PHP 版本 5.3 &德鲁帕尔6

I have a script, that is run as a part of my module in Drupal.
In this module, I use cURL functions to request html page from a remote website, then I parse the html content and write it to my database.
I wanted to have a delay between every request that I do to the remote server, hence I added sleep() in my PHP script.

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. function get_me_data() is initiated by cron job(hook_cron implemented in .module file).
  2. I have also tried to flush streams before the usage of sleep command.
    used flush(); ob_flush();fflush(filepointer); ob_implicit_flush(true)

It so happens that after 4-5 iterations, sleep() command returns NON ZERO value.
the script aborts in the next iteration when sleep() is called

Let me know, if I am overlooking any aspect of sleep() here.
I am using, PHP version 5.3 & Drupal 6

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

这样的小城市 2024-10-27 14:14:53

根据文档 http://php.net/manual/en/function.sleep.php 可以返回非零值。

如果调用被信号中断,sleep() 将返回一个非零值。在 Windows 上,该值始终为 192(Windows API 中 WAIT_IO_COMPLETION 常量的值)。在其他平台上,返回值将是剩余的睡眠秒数。

睡眠中的注释使用 time_sleep_until() 因为它不会被打扰。

According to the docs http://php.net/manual/en/function.sleep.php can return non zero values.

If the call was interrupted by a signal, sleep() returns a non-zero value. On Windows, this value will always be 192 (the value of the WAIT_IO_COMPLETION constant within the Windows API). On other platforms, the return value will be the number of seconds left to sleep.

A comment in the sleep uses time_sleep_until() because it doesn't get interrupted.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文