<?php
include('time.php'); //time script
echo "First 100 users of SO<br/>";
for($i=0; $i<100;$i++){
$contents=file_get_contents("https://stackoverflow.com/privileges/user/".$i);
preg_match('!<div class="summarycount al">(.+?)</div>!', $contents, $matches);
$rep = $matches[1];
echo "<br/>".$i.") ".$rep."<br/>";
include('timetaken.php'); //script which outputs time difference
}
?>
输出
First 100 users of SO
0) 0
2.3584280014038
1) 14,436
4.469074010849
2) 875
10.651238918304
3) 2,431
12.991086959839
4) 8,611
15.451638936996
5) 14,988
17.535580873489
6) 0
19.686461925507
7) 0
21.796992063522
8) 218
23.931365013123
9) 2,569
26.419286966324
10) 101
28.540382862091
11) 232
30.755586862564
12) 0
32.960548877716
13) 33,898
35.163224935532
14) 0
37.280658006668
15) 6,388
39.425274848938
16) 143
41.541421890259
17) 14,366
43.655340909958
18) 0
45.771246910095
19) 99
47.882269859314
20) 4,204
49.993322849274
21) 0
52.108762979507
22) 1,517
54.221307039261
23) 411
56.345490932465
24) 103
58.892389059067
Fatal error: Maximum execution time of 60 seconds exceeded in C:\test.php on line 5
这个脚本的问题: 1.页面加载后60秒的时候,它timesout
我知道我可以加一个
set_time_limit(500);
的代码,并获得第100个名誉,但是这将导致在后页面加载说120秒。
如何在短时间内获得结果,因为数据是使用PHP或使用任何其他语言(python,java)或其他任何语言收集的。 之前有人说,我已经阅读Best way to manage long-running php script?,这可能是一个可能的重复,但没有回答我的问题。 我的问题是没有完成全部作业,但因为它正在做显示结果。
(请处理标签对我来说)
样品是一个例子,我一直在寻找作为脚本被处理,而不是在它的端部来显示输出。你究竟是什么意思我的收获数据。要以这种方式查询整个SO用户列表,我必须设置一个非常大的时间限制,然后将其存储到本地数据库。无论如何要在服务器的后台执行此操作。 – abel 2010-10-08 11:10:08
收获的简单版本可能会像这样。存储最后收获的ID的变量。有一个查找该变量的脚本,然后开始导入记录。对于每个导入的记录,提取并在本地存储(大概在一个分贝)你想要的信息。在退出之前(或每次完成一条记录时),更新存储的最后收集的id变量。设置脚本只能收获如此多的记录,比如5分钟。有cron定期调用脚本,直到所有记录收获。然后偶然地获得自上次收获以来创建的任何新记录。 – 2010-10-08 17:19:56
只是要清楚:在Linux机器上,您使用cron来定期运行预定事件。在IIS上,您使用调度程序(我认为这就是所谓的)。无论哪种情况,这都是在服务器上运行定期发生的后台php进程的标准方式。 – 2010-10-08 17:24:32