迫不得已,只能发帖求助:用EC2上运行Amazon Linux,PHP的fopen不能解析域名,但CURL等都正常

2012-12-19 20:38:11 +08:00
 solf
实在不知道是PHP问题还是Linux问题,所以就发到这里来。入正题:

背景:
在EC2上运行Amazon Linux,使用wget和curl均正常。
编译安装的PHP,ini文件确认已将allow_url_fopen打开,PHP里使用CURL也一切正常。

问题:
PHP的函数,包括fopen, file_get_contents, getimagesize,均不能解析域名——连file_get_contents(http://localhost/index.php)都不行,返回空值(不是false);而使用ip地址是没问题——如 file_get_contents(http://127.0.0.1/index.php)

补充:
我一开始以为是DNS问题,但其他函数如curl_init后再exec都没有问题,均可正确读取所有网址。也以为是SELINUX问题,发现好像并没有安装SELINUX,/etc下连selinux目录也没有。
5553 次点击
所在节点    Linux
11 条回复
saharabear
2012-12-19 21:39:56 +08:00
看一下php.ini里面有没有打开fopen的选项。
solf
2012-12-20 05:52:17 +08:00
@saharabear 都打开了。就是域名不会解析
kingwkb
2012-12-20 08:40:33 +08:00
为什么要自己编译呢,Amazon 的yum很好
BOYPT
2012-12-20 14:43:18 +08:00
file_get_contents如果有错误会在log里面给warnning的,看看log了什么吧,怎么就说是DNS呢
solf
2012-12-20 14:48:28 +08:00
@BOYPT 没有任何warning或者notice。如果用getimagesize就有read error的warning。 gethostbyname等function都正常
BOYPT
2012-12-20 17:28:45 +08:00
@solf 那应该是其他问题了. Stackoverflow找到个相似的:

http://stackoverflow.com/questions/4172860/file-get-contents-returns-empty-string

说是PHP的bug~
solf
2012-12-21 14:31:48 +08:00
@BOYPT 太感谢了。从你提供的贴中找到线索。原来是curl问题
BOYPT
2012-12-24 09:15:31 +08:00
@solf 也是去除--with-curlwrapper 重新编译?
solf
2012-12-24 13:48:40 +08:00
@BOYPT 对。
BOYPT
2012-12-25 13:45:49 +08:00
@solf 嗯 解决了问题最好把重点信息在这里重复一次,以便关注者了解到。
solf
2012-12-27 10:21:26 +08:00
@BOYPT 谢谢提醒。

解决办法是编译的时候将 ‘--with-curlwrapper’ 去掉,因为这个参数还在实验阶段。去掉后fopen就会使用http的wrapper,而不是用curl的wrapper。

我是在以下链接找到解决办法
http://weizhifeng.net/wrong-with-curlwrappers.html

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

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

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

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

© 2021 V2EX