我正在嘗試使用PHP創建一個網站監控webapp。要監視的網站的URL存儲在MySQL表中。腳本每分鐘通過cron運行 - 循環遍歷所有網站,並使用CURL訪問網站的URL以及CURLINFO_HTTP_CODE獲取HTTP代碼 - 如果網站啓動則返回true,否則返回false。用cron運行Foreach循環的PHP腳本 - 花費太長時間 - 如何更快地執行它
該腳本工作正常 - 有一個或兩個網站運行需要的毫秒數,但有20個網站平均需要運行2-15秒。我可以看到,當添加更多網站時,這會造成問題 - 理想情況下,我需要監控數千個網站,並且用戶能夠添加自己的網站。
我曾經想過當用戶添加一個站點來監視每個URL時添加的個別cron和文件 - 但是我不知道如何去做,並且我可以預見到一些問題,因爲我正在共享服務器。
那麼我應該怎麼做呢,還是有沒有更好的方法,我沒有想到?
<?php
function visit($url) {
// VISITS WEBSITE - RETURNS TRUE IF SITE UP, FALSE IF DOWN
}
// GETS THE MONITOR DETAILS FROM DATABASE
$monitor = new Table($monitorInstance);
$all_monitors = $monitor->get('monitors');
$monitors = $monitor->tableData();
//LOOP THROUGH ALL MONITORS
foreach ($monitors as $monitor1) {
$id = $monitor1->id; //GETS ID
$website = $monitor1->url; //GETS URL
$status = $monitor1->status; //GETS STATUS - 'up' or 'down'
// RUNS FUNCTION
if (visit($website)) {
$new_status = 'up';
} else {
$new_status = 'down';
}
// IF STATUS CHANGE UPDATE THE DATABASE
if ($new_status != $status) {
try {
//update the database with the new status
$monitor->update('monitors', $id, array(
'status' => $new_status,
));
} catch(Exception $e) { //catch exceptions
die($e->getMessage());
}
// ALSO SEND EMAIL TO USER
}
}
'它使用CURL訪問網站並獲取HTTP代碼 - 如果網站啓動則返回true,否則返回false爲什麼不捲曲頭並檢查http狀態代碼而不是獲取全部內容這一頁? – JustOnUnderMillions
爲什麼不更新''監視器'與所有新的值,而不是做多個SQL查詢? – JustOnUnderMillions
爲什麼你不看看多捲曲,你可以同時做這些請求 – frz3993