<?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