群里一位大佬上午说了一句箴言:「 世界上没有什么故障是重启解决不了的,如果有,再重启一次。」,结果下午群里就有一位朋友遇到了一个诡异的老版本 PHP 问题:当使用 file_get_contents 抓取网页内容的时候,总是返回空字符串,奇怪的是换用 curl 扩展后又一切正常。不过,重启没有解决他的问题,再重启一次也不行。
既然 curl 能够正常工作,至少可以证明网络本身没问题。
首先值得怀疑的是 allow_url_fopen 配置。如果没有开启它的话, file_get_contents 是不能访问远程地址的。(排除!)
接着还怀疑过是不是和 ignore_errors 配置有关。(排除!)
然后尝试着用 strace、ltrace 跟踪了一下代码,发现目标 服务器 已经接收到了请求,并且成功返回了数据,可是 file_get_contents 就是返回空。
问题到了这里似乎没招儿了。试着查看了一下 PHP 的编译参数,发现了一个少见的选项:with-curl-wrappers,相对应的搜索到了 PHP RFC 里一篇介绍文章: Request for Comments: Removal of curl-wrappers ,大概看了看,感觉这东西就是一个坑啊,基本锁定问题就是出在它身上。
试着去掉 with-curl-wrappers 重新编译一下 PHP,尼玛问题依旧!不过想到刚刚重新编译 PHP 的时间非常短,猜想是不是有什么残留数据干扰了结果,于是在「make」前加了一步「make clean」,终于一切都正常了!
记得小学写作文的时候,老师教我们要首尾呼应,那好吧,请允许我调皮一下:「 世界上没有什么故障是重启解决不了的,如果有,再重启一次。」
原始发表:2018-03-21, 如有侵权请联系 cloudcommunity@tencent.com 删除
社区
活动
资源
关于
腾讯云开发者
扫码关注腾讯云开发者
领取腾讯云代金券
热门产品
热门推荐
更多推荐
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287