美文网首页
PHP中CURL指定IP

PHP中CURL指定IP

作者: imjcw | 来源:发表于2019-12-24 11:41 被阅读0次

    前言

    之前公司官方商城改版,给前台一些页面做了 Memcache 缓存。在这期间,经常涉及到一些页面的改动,商品页的描述也在不断更新,每次都需要开发人员到服务器上 reload Memcache,比较麻烦,不然只有三个小时后页面才会失效,然后重载。

    故想做一个后台配置,给运营同事操作。当运营同事修改了商品描述后,只需重载一下,就可以及时的更新给用户。

    想法

    本来呢,我的想法很简单,就是在官网项目里添加一个接口,然后在运营中心那边调用这个接口就行,这样就可以使某个页面的缓存失效。

    之后,华仔跟我说,可以看看 web14 (我司的一台服务器)上的配置,看完之后,发现他的想法很不错。具体是,给请求加个 header,然后直接访问页面,就不会走缓存,会执行程序并重载这个页面的缓存。

    坑来了

    然而当我想要开始动工的时候,发现了一个尴尬的问题。

    我司的服务器有多台,同时 Memcache 缓存在每一台服务器上,那么 CURL 如何指定到各个 IP 呢。

    Google 了一下,找到了解决方案。

    解决

    修改hosts

    10.21.72.179 jcwblog.com
    

    这个方式只能制定某一台服务器的 IP,当遇到多种情况时,就不行了。

    使用CURLOPT_RESOLVE

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://jcwblog.com');
    curl_setopt($ch, CURLOPT_RESOLVE, [
        "jcwblog.com:80:10.21.72.179"
    ]);
    

    PHP 7.0.22 下可以正常运行,可是跑到 PHP 5.5.38 下就不行了。

    使用CURLOPT_HTTPHEADER — 最终的实现方案

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://10.21.72.179');
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Host:jcwblog.com'
    ]);
    

    这样只需要更换 IP 就好。

    总结

    一开始还是蛮担心自己弄不出来的,没想到解决问题是这么的简单。

    参考资料

    理货宝 php curl 域名解析到指定IP

    -- EOF --
    本文转载自IMJCW
    原文链接:PHP中CURL指定IP

    相关文章

      网友评论

          本文标题:PHP中CURL指定IP

          本文链接:https://www.haomeiwen.com/subject/pbxtnctx.html