PHP 如何识别并返回 file_get_contents 访问的地址状态码为 200?

2016-11-14 13:13:06 +08:00
 qcloud


执行之后,需要一个弹窗来提示执行成功,由于对 PHP 不是很熟悉,所以不知道怎么做,麻烦 V 友帮一下。。。
1760 次点击
所在节点    问与答
11 条回复
raincious
2016-11-14 13:16:32 +08:00
hanzichi
2016-11-14 13:17:45 +08:00
用 curl ?坐等老司机
hanzichi
2016-11-14 13:18:10 +08:00
@raincious 这头像吊啊,差点信以为真
hanzichi
2016-11-14 13:18:45 +08:00
Herobs
2016-11-14 13:19:19 +08:00
首先查看该函数的文档 http://php.net/manual/zh/function.file-get-contents.php

如果发现不能满足需求,就可以考虑 [curl]( http://php.net/manual/zh/book.curl.php)。
wesley
2016-11-14 13:23:44 +08:00
给你一个笨办法,先用 get_headers 获取状态码
langmoe
2016-11-14 13:32:17 +08:00
qcloud
2016-11-14 13:33:56 +08:00
@raincious
@hanzichi
@Herobs
@wesley
谢谢各位哦
已经通过 @raincious 的办法解决,谢谢。
qcloud
2016-11-14 13:34:19 +08:00
@langmoe 谢谢啦,已经解决
raincious
2016-11-14 20:08:05 +08:00
@qcloud
客气,但要注意,上面的解决方案只是针对你使用 file_get_contents 而言的。原理是获得 HTTP 的反回头,然后进行字符串检查。

这里有个投机取巧的地方是 HTTP 协议规定服务器的第一行返回必须是状态码,格式是:
HTTP/版本 版本 说明

而第一行返回必定是 $http_response_header 这个数组的第 0 个项,所以我上面回答中的代码才能工作。

你新写的代码需要执行 empty 检查来判断 $http_response_header 是否已经被设定并且不为空,否则如果 file_get_contents 失败了,你后续的代码会报 Notice 指出 Undefined Index 。

如果你想要严格的检查 Status code ,建议使用一个更高级的 API ,这样你就不用像上面一样自己去“解析”状态码了。比如上面很多人建议的 CURL ,这里直接有例子代码:
http://php.net/manual/en/function.curl-getinfo.php#refsect1-function.curl-getinfo-examples

你可以参考 @hanzichi 写的代码来整合这些东西(其实就是加一行 curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200 )。
lslqtz
2016-11-15 03:29:20 +08:00
@raincious 如果是我,我准备用$http_response_header 或 get_headers ,然后把状态码用 explode 分割,取第二个值

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX