我正在尝试编写一个 ping 几百个地址并返回它们的值(毫秒)的函数。到目前为止,我已经实现了 ping 并获得结果的最初想法,但是当对数百个地址使用相同的代码时会出现问题,PHP 页面会停止,直到它超时或到达最后一个 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>';
?>
在一些反馈之后,我在脚本中添加了一个for循环以及 ob_flush() 和 flush(),并且我还在php.ini中将 output_buffering 设置为 0 。它似乎适用于我迄今为止测试过的大多数浏览器(IE8、Firefox 12、Chrome 19、Opera 11、Safari 5)。似乎当前代码现在正在按预期工作,但任何改进它的建议都非常感谢。
感谢您的反馈意见。