PHP fsockopen不适用于域名

时间:2015-08-06 03:41:31

标签: php nginx fsockopen

我有以下脚本:

                    [][][]                              
                [][][]    [][][]                        
            [][]              [][]                      
            []                  [][]                    
          []                      []                    
          []                      [][]                  
        [][]                      [][][][][]            
        [][]                              [][][]        
          []                                  []        
        [][]                                    []      
    [][][]                                      []      
    []                                          [][]    
  [][]                                            []    
  []                                    [][][]          
  []                                        []          
  []                                        [][]        
  []                                          []        
  []                                          []        
  [][]                                        []        
    [][]                                    []          
      [][]            []                    []          
        [][][]    [][][]                  []            
            [][][][]  [][]              [][]            
                        [][][]    [][][]                
                              [][][]                    

它返回了:

$con = @fsockopen('mx.mydomain.com', 587, $errno, $errstr, 10);
if(empty($con)) echo "Not connected: ".$errno." - ".$errstr;
else echo "Connected!";

使用任何域发生,但如果我在/ etc / hosts中输入IP或定义则不会发生。 resolv.conf的:

Not connected: 110 - Connection timed out

我试过告诉其他DNS服务器但仍然存在。 ping工作正常。 我不知道还能在哪里解决它。

PHP 5.4 / NGINX 1.8 / CentOS 6.6

1 个答案:

答案 0 :(得分:1)

根据a conversation with @rdlowrey显示:

  

gethostbyname()无法解析IPv6记录,这是      如果您在URI中传递实际域名,PHP会使用什么。      在这种情况下,用户需要直接指定IP。这意味着他们应该:

     
      
  1. 首先尝试gethostbyname()以查看它是否可以解析IPv4地址。
  2.   
  3. 如果失败(并且将在此用户的情况下),他们应手动使用带有DNS_AAAA常量的dns_get_record()来表示IPv6
  4.   

来自源代码的相关代码可以找到gethostbyname()由PHP在内部用于解析URI中的主机名,可以找到here