V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qcloud
V2EX  ›  问与答

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

  •  
  •   qcloud · 2016-11-14 13:13:06 +08:00 · 1811 次点击
    这是一个创建于 2931 天前的主题,其中的信息可能已经有所发展或是发生改变。


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

    如果发现不能满足需求,就可以考虑 [curl]( http://php.net/manual/zh/book.curl.php)。
    wesley
        6
    wesley  
       2016-11-14 13:23:44 +08:00
    给你一个笨办法,先用 get_headers 获取状态码
    langmoe
        7
    langmoe  
       2016-11-14 13:32:17 +08:00
    qcloud
        8
    qcloud  
    OP
       2016-11-14 13:33:56 +08:00
    @raincious
    @hanzichi
    @Herobs
    @wesley
    谢谢各位哦
    已经通过 @raincious 的办法解决,谢谢。
    qcloud
        9
    qcloud  
    OP
       2016-11-14 13:34:19 +08:00
    @langmoe 谢谢啦,已经解决
    raincious
        10
    raincious  
       2016-11-14 20:08:05 +08:00   ❤️ 1
    @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
        11
    lslqtz  
       2016-11-15 03:29:20 +08:00
    @raincious 如果是我,我准备用$http_response_header 或 get_headers ,然后把状态码用 explode 分割,取第二个值
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   978 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:57 · PVG 03:57 · LAX 11:57 · JFK 14:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.