php实现的ping端口函数实例

这篇文章主要介绍了php实现的ping端口函数,以实例形式较为详细的分析了PHP使用socket编程的技巧,需要的朋友可以参考下

本文实例讲述了php实现的ping端口函数。分享给大家供大家参考。

具体实现代码如下:

  1. <?php
  2. /*
  3. * @author xujiajay
  4. * @date 2010-10-7
  5. * @function 可以ping端口的php函数
  6. *
  7. */
  8. error_reporting(E_ERROR);
  9. header("content-Type: text/html; charset=utf-8");
  10. set_time_limit(120);
  11. $host = isset($_POST['url']) ? chop(str_replace('http://','',$_POST['url'])) : 'www.baidu.com';
  12. $port = isset($_POST['duankou']) ? chop($_POST['duankou']) : '80';
  13. $num = 10;
  14. function microtime_float()
  15. {
  16. list($usec, $sec) = explode(" ", microtime());
  17. return ((float)$usec + (float)$sec);
  18. }
  19. function getsoft($host,$port)
  20. {
  21. $fp = @fsockopen($host,$port,&$errno,&$errstr,3);
  22. if(!$fp) return 'unknown';
  23. $get = "GET / HTTP/1.1\r\nHost:".$host."\r\nConnection: Close\r\n\r\n";
  24. @fputs($fp,$get);
  25. $data = '';
  26. while ($fp && !feof($fp))
  27. $data .= fread($fp, 1024);
  28. @fclose($fp);
  29. $array = explode("\n",$data);
  30. $k = 2;
  31. for($i = 0;$i < 20;$i++)
  32. {
  33. if(stristr($array[$i],'Server')){$k = $i; break;}
  34. }
  35. if(!stristr($array[$k],'Server')) return 'unknown';
  36. else return str_replace('Server','服务器软件',$array[$k]);
  37. }
  38. function ping($host,$port)
  39. {
  40. $time_start = microtime_float();
  41. $ip = gethostbyname($host);
  42. $fp = @fsockopen($host,$port,&$errno,&$errstr,1);
  43. if(!$fp) return 'Request timed out.'."\r\n";
  44. $get = "GET / HTTP/1.1\r\nHost:".$host."\r\nConnection: Close\r\n\r\n";
  45. @fputs($fp,$get);
  46. @fclose($fp);
  47. $time_end = microtime_float();
  48. $time = $time_end - $time_start;
  49. $time = ceil($time * 1000);
  50. return 'Reply from '.$ip.': time='.$time.'ms';
  51. }
  52. if(isset($_POST['url']) && isset($_POST['duankou']))
  53. {
  54. echo '<font color="#FF0000">'.getsoft($host,$port).'</font>';
  55. echo 'Pinging '.$host.' ['.gethostbyname($host).'] with Port:'.$port.' of data:'."\r\n";
  56. ob_flush();
  57. flush();
  58. for($i = 0;$i < $num;$i++)
  59. {
  60. echo ping($host,$port);
  61. ob_flush();
  62. flush();
  63. sleep(1);
  64. }
  65. }
  66. ?>
  67. <form method="POST">
  68. 域名/IP:<input type="text" name="url" value="<?php echo $host;?>" size="50">
  69. 端口:<input type="text" name="duankou" value="<?php echo $port;?>" size="10">
  70. <input type="submit" value="ping">
  71. </form>

希望本文所述对大家的PHP程序设计有所帮助。