网页爬虫 - PHP 延迟执行的问题?
echo time();
sleep(10);
echo time();
其实是【等了10秒】之后,【再同时】显示两个时间戳,时间戳之间相差10秒。
而我想要的效果是先显示第一个时间戳,等10秒,再显示第二个时间戳。
于是:
我想要用无限循环,然后判断当前时间与预存时间之间的差值来break出当前的死循环。比如:
for(100遍){
//一些操作
$start = time();
while(true){
if(time() - $start == 1)break;
}
}
意思for循环每执行一次,末尾都会进入死循环,然后隔了1秒跳出死循环,继续下一次for循环。
但是,但是,居然是死循环!!!
后来试了下:
while(true){
echo time();
}
居然不变!!!而 echo 出 date('s') 是变的!!!
所以想问:
1、如果说需要满足延迟执行的需求,不要sleep,不要线程,单纯就是暂停下再执行(其实我是做的爬虫,频率高了会被302),除了上面死循环的方式还有其它方式吗?(不要 AJAX,仅是 PHP 端)
2、为什么那个 time() 不变?
回复内容:
去网上查了,首先是sleep系列(sleep/usleep/nanosleep/time_sleep_until)的函数,首先这些函数有个问题,sleep是当前进程挂起,比如:
echo time();
sleep(10);
echo time();
其实是【等了10秒】之后,【再同时】显示两个时间戳,时间戳之间相差10秒。
而我想要的效果是先显示第一个时间戳,等10秒,再显示第二个时间戳。
于是:
我想要用无限循环,然后判断当前时间与预存时间之间的差值来break出当前的死循环。比如:
for(100遍){
//一些操作
$start = time();
while(true){
if(time() - $start == 1)break;
}
}
意思for循环每执行一次,末尾都会进入死循环,然后隔了1秒跳出死循环,继续下一次for循环。
但是,但是,居然是死循环!!!
后来试了下:
while(true){
echo time();
}
居然不变!!!而 echo 出 date('s') 是变的!!!
所以想问:
1、如果说需要满足延迟执行的需求,不要sleep,不要线程,单纯就是暂停下再执行(其实我是做的爬虫,频率高了会被302),除了上面死循环的方式还有其它方式吗?(不要 AJAX,仅是 PHP 端)
2、为什么那个 time() 不变?
sleep确实让程序暂停了,毕竟你得到的两个时间戳相差了10秒,但为啥是10s后一起显示出来呢?因为第一次输出的内容 还在buffer里,关闭输出缓存即可看到你想要的效果
ob_end_flush();
这样的循环,1秒内能输出几十万上百万次时间,同一秒内当然都一样,1s之后肯定会变。
上一篇: php变量作用域的用法总结
推荐阅读
-
PHP网页UTF8编码开发中空白的问题
-
关于在linux中定时执行php文件的有关问题
-
解决Python3 被PHP程序调用执行返回乱码的问题
-
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
-
python爬虫 下载一个网页内的图片解决分页以及图片懒加载的问题
-
解决Python3 被PHP程序调用执行返回乱码的问题
-
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
-
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
-
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
-
php-fpm重启导致的程序执行中断问题详解