我正在构建一个小型网络应用程序,它将ping一组域并返回其状态,让我监视它们是否上升或下降,指向正确的服务器等。(live example that may or may not be working)< / p>
我开始使用exec("ping -n 3 -w 3 {$_POST['host']}", $output, $status);
,现在正在使用exec("traceroute -w 1 {$_POST['host']}", $output, $status);
并抓住最后一个$output
并在那里匹配IP。
除了我注意到它没有遵循301重定向等之外,这大部分都有效。
例如myrayhawk.com
上的traceroute产生类似于:
1 192.168.1.1 (192.168.1.1) 0.495 ms 0.683 ms 0.911 ms
2 10.71.96.1 (10.71.96.1) 32.220 ms 55.987 ms 57.109 ms
3 ip68-4-12-93.oc.oc.cox.net (68.4.12.93) 58.231 ms 59.353 ms 60.424 ms
4 68.4.15.242 (68.4.15.242) 72.339 ms 73.451 ms 74.641 ms
5 ip68-4-11-16.oc.oc.cox.net (68.4.11.16) 76.265 ms 77.383 ms 79.591 ms
6 ip68-4-11-94.oc.oc.cox.net (68.4.11.94) 143.201 ms 18.749 ms 41.717 ms
7 langbprj01-ae1.rd.la.cox.net (68.1.1.13) 42.843 ms 43.971 ms 68.194 ms
8 reserved.metro.la.ipv4.godaddy.com (206.223.123.32) 45.094 ms 70.501 ms 69.329 ms
9 ip-97-74-253-94.ip.secureserver.net (97.74.253.94) 71.622 ms 72.754 ms 74.844 ms
10 ip-97-74-253-94.ip.secureserver.net (97.74.253.94) 108.322 ms 112.058 ms 109.446 ms
11 ip-97-74-253-98.ip.secureserver.net (97.74.253.98) 110.589 ms 37.376 ms 38.861 ms
12 ip-97-74-254-134.ip.secureserver.net (97.74.254.134) 68.868 ms 70.791 ms 72.282 ms
13 ip-184-168-86-185.ip.secureserver.net (184.168.86.185) 82.400 ms 76.183 ms 78.540 ms
但在rayhawk.com
做同样的事情,因为我知道那里有301重定向:
1 192.168.1.1 (192.168.1.1) 0.738 ms 0.868 ms 1.174 ms
2 10.71.96.1 (10.71.96.1) 95.723 ms 119.914 ms 122.994 ms
3 ip68-4-12-89.oc.oc.cox.net (68.4.12.89) 123.558 ms 124.115 ms 124.679 ms
4 68.4.15.240 (68.4.15.240) 127.319 ms 127.933 ms 128.523 ms
5 ip68-4-11-16.oc.oc.cox.net (68.4.11.16) 126.672 ms 132.373 ms 131.802 ms
6 ip68-4-11-94.oc.oc.cox.net (68.4.11.94) 130.986 ms 65.913 ms 64.542 ms
7 langbprj01-ae1.rd.la.cox.net (68.1.1.13) 89.395 ms 88.751 ms 88.113 ms
8 reserved.metro.la.ipv4.godaddy.com (206.223.123.32) 97.840 ms 89.999 ms 90.593 ms
9 po36.trma0202-01.bbn.mgmt.phx3.gdg (216.69.188.33) 98.454 ms 99.034 ms 115.921 ms
10 po36.trma0202-01.bbn.mgmt.phx3.gdg (216.69.188.33) 114.698 ms 114.032 ms 115.263 ms
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
我尝试使用wget --spider hostname.com
,但wget
不喜欢在php exec()
调用中很好地工作。
在普通SSH中执行wget
时,我得到:
Resolving rayhawk.com... 72.167.131.159
Connecting to rayhawk.com|72.167.131.159|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.rayhawk.com/ [following]
Spider mode enabled. Check if remote file exists.
--2012-04-12 11:37:42-- http://www.rayhawk.com/
Resolving www.rayhawk.com... 72.167.131.159
Connecting to www.rayhawk.com|72.167.131.159|:80... connected.
HTTP request sent, awaiting response... 200 OK
然后可以解析我想要的东西。
如何解析主机的最终位置并在PHP中检索它的HTTP状态代码?
答案 0 :(得分:1)
我写过一篇关于如何获取可能发生的HTTP重定向的博客文章,它带有代码示例:
http://example.com/
的示例输出:
Status code (after all redirects): 200
Number of responses: 2 (1 Redirect(s))
* http://example.com/ -- 302 --> http://www.iana.org/domains/example/
您可以在the answer to a related question HTTP response code after redirect中找到更深入的代码讨论。