我試圖編寫一個ping幾百個地址並返回它們的值(毫秒)的函數。到目前爲止,我已經實現了最初的想法,即ping和獲得結果,但是當爲數百個地址使用相同的代碼時會出現問題,PHP頁面會暫停,直到它超時或達到最後的ping命令。逐步輸出exec()ping結果
我會很高興,如果我能得到一些建議,以逐步輸出的結果,這裏是我當前的代碼:
<?php
// "for" loop added according to suggestion for browser compatibility (IE, FF, CHR, OPR, SFR)
for($i = 0; $i < 5000; $i++)
{
echo ' ';
}
function GetPing($ip = NULL) {
// Returns the client ping if no address has been passed to the function
if(empty($ip)) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// Check which OS is being run by the client
if(getenv('OS') == 'Windows_NT') {
//echo '<b>Detected local system:</b> Windows NT/2000/XP/2003/2008/Vista/7<p>';
$exec = exec("ping -n 1 -l 32 -i 128 " . $ip);
return end(explode(' ', $exec));
}
else {
//echo '<b>Detected local system:</b> Linux/Unix<p>';
$exec = exec("ping -c 1 -s 32 -t 128 " . $ip);
$array = explode('/', end(explode('=', $exec)));
return ceil($array[1]) . 'ms';
}
// ob_flush and flush added according to suggestion for buffer output
ob_flush();
flush();
}
// Added to test 20 sequential outputs
for($count = 0; $count < 20; $count++)
echo GetPing('8.8.8.8') . '<div>';
?>
一些反饋後,我添加了一個爲循環以及使用ob_flush ()和flush()到我的腳本,我也設置output_buffering爲0在php.ini。它似乎適用於目前爲止我測試過的大多數瀏覽器(IE8,Firefox 12,Chrome 19,Opera 11,Safari 5)。目前的代碼似乎正在按預期工作,但任何改進它的建議都非常值得讚賞。
感謝您的反饋。
看看[** fping **](http://fping.sourceforge.net/)。它比傳統的ping更容易處理多個主機的ping操作,並且更容易通過軟件解析船隻輸出。 – ghoti