11

记录file_get_contents返回空字符串的问题

 3 years ago
source link: https://blog.huoding.com/2018/03/21/661
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

火丁笔记

多研究些问题,少谈些主义。

火丁笔记 搜索

← 上一篇 下一篇 →

记录file_get_contents返回空字符串的问题

发表于2018-03-21

群里一位大佬上午说了一句箴言:「 世界上没有什么故障是重启解决不了的,如果有,再重启一次。」,结果下午群里就有一位朋友遇到了一个诡异的老版本 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」,终于一切都正常了!

记得小学写作文的时候,老师教我们要首尾呼应,那好吧,请允许我调皮一下:「 世界上没有什么故障是重启解决不了的,如果有,再重启一次。」

此条目由老王发表在Technical分类目录,并贴了PHP标签。将固定链接加入收藏夹。

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论

显示名称 *

电子邮箱地址 *

网站网址


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK