2017-10-10 3 views
-1

Mon titre de la question semble être le même avec d'autres questions, mais le problème est différent des autres. Mon code:fsockopen renvoie 'bool (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); 

Mes pièces tableau est:

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

quelqu'un peut-il s'il vous plaît laissez-moi savoir quel est le problème dans le code ci-dessus qui ramènerai faux. Merci d'avance.

+1

isset (pièces $ [ 'port'])? $ parts ['port']: 443. Vous ne définissez pas le port, mais vous utilisez le schéma http –

+0

@ChenYunlong: Oui, j'ai trouvé le problème. Je vous remercie :) – Sucharitha

Répondre

0

Problème avec la fonction fsockopen. Pour tester dans des serveurs locaux et non sécurisés, nous devons supprimer $ parts ['scheme']. ': //' de l'appel de fonction fsockopen.

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

Le first argument de fsockopen() est $hostname. Aucun schéma, aucun ://. Juste le nom d'hôte.

En outre, vous devez décider le port par défaut basé sur le schéma:

// 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);