2017-10-10 93 views
-1

我的问题标题似乎与其他问题相同,但问题与其他问题不同。 我的代码:fsockopen返回'布尔(false)'

 $post_string = http_build_query($params); 
     $parts = parse_url($url);  
     $errno = 0; 
     $errstr = ""; 

     $fp = fsockopen($parts['scheme'].'://' . $parts['host'], isset($parts['port']) 
        ? $parts['port'] : 443, $errno, $errstr, 30);    
     echo "<pre>"; var_dump($fp); 

我的部分数组是:

Array 
(
    [scheme] => http 
    [host] => local.abhibus.com 
    [path] => /search/distanceC 
) 

任何人都可以请让我知道什么是在上面的代码导致返回false问题。提前致谢。

+1

isset? $ parts ['port']:443.你不设置端口,但是你使用http方案 –

+0

@ChenYunlong:是的,我发现了这个问题。谢谢 :) – Sucharitha

回答

0

fsockopen函数问题。要在本地和不安全的服务器上测试,我们必须从fsockopen函数调用中删除$ parts ['scheme']。'://'。

$fp=fsockopen($parts['host'], isset($parts['port']) 
        ? $parts['port'] : 80, $errno, $errstr, 30); 
0

的的fsockopen()first argument$hostname。没有方案,没有://。只是主机名。

此外,你应该决定基于该方案的默认端口:([ '口'] $部分)

// The default HTTP port is 80 
$port = 80; 
if (isset($parts['port'])) { 
    // A port is specified in the URL; use it 
    $port = $parts['port']; 
} elseif ($parts['scheme'] == 'https') { 
    // No port in URL and the protocol is HTTP 
    // the default port for HTTPS is 443 
    $port = 443; 
} 

$fp = fsockopen($parts['host'], $port, $errno, $errstr, 30);