V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
solf
V2EX  ›  Linux

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

  •  
  •   solf · 2012-12-19 20:38:11 +08:00 · 5525 次点击
    这是一个创建于 4118 天前的主题,其中的信息可能已经有所发展或是发生改变。
    实在不知道是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目录也没有。
    11 条回复    1970-01-01 08:00:00 +08:00
    saharabear
        1
    saharabear  
       2012-12-19 21:39:56 +08:00
    看一下php.ini里面有没有打开fopen的选项。
    solf
        2
    solf  
    OP
       2012-12-20 05:52:17 +08:00
    @saharabear 都打开了。就是域名不会解析
    kingwkb
        3
    kingwkb  
       2012-12-20 08:40:33 +08:00
    为什么要自己编译呢,Amazon 的yum很好
    BOYPT
        4
    BOYPT  
       2012-12-20 14:43:18 +08:00
    file_get_contents如果有错误会在log里面给warnning的,看看log了什么吧,怎么就说是DNS呢
    solf
        5
    solf  
    OP
       2012-12-20 14:48:28 +08:00
    @BOYPT 没有任何warning或者notice。如果用getimagesize就有read error的warning。 gethostbyname等function都正常
    BOYPT
        6
    BOYPT  
       2012-12-20 17:28:45 +08:00   ❤️ 1
    @solf 那应该是其他问题了. Stackoverflow找到个相似的:

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

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

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

    我是在以下链接找到解决办法
    http://weizhifeng.net/wrong-with-curlwrappers.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2907 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 14:15 · PVG 22:15 · LAX 07:15 · JFK 10:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.