2012-06-27 27 views
13

Ho lavorato a un'applicazione Facebook che utilizza l'API di Facebook per l'autenticazione, di recente Facebook aggiornato a IPv6 e la mia rete non supporta IPv6 quindi tutte le mie chiamate hanno iniziato a restituire Host è un errore irraggiungibile, ho cercato su bug di Facebook e abbiamo scoperto che possiamo ancora usare le richieste di forza su Facebook per usare IPv4 usando CURL CURLOPT_IPRESOLVE.PHP Curl CURLOPT_IPRESOLVE

Ora, quando provo a trasmettere richiesta a Facebook Graph API utilizzando ricciolo ottengo Avviso: l'uso di indefinito CURLOPT_IPRESOLVE costante - assunto 'CURLOPT_IPRESOLVE'

Vorrei sapere come posso abilitare il supporto per questa costante o come posso disabilitare il supporto IPv6 in php in modo che possa inviare richiesta all'API di Facebook Graph utilizzando IPv4.

mio codice è

$url = ("https://graph.facebook.com/me/access_token?tokrn"); 
     $c = curl_init(); 
     curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($c, CURLOPT_URL, $url); 
     curl_setopt($c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
     $contents = curl_exec($c); 
     $err = curl_getinfo($c,CURLINFO_HTTP_CODE); 
     curl_close($c); 

Grazie

+0

lol, qualcuno veramente mi odia qui, -1 su ogni mia domanda, continuate così ragazzina ... – TilalHusain

+1

Grazie mille per la pubblicazione di questa domanda! Ha risolto i miei problemi di timeout. – Steven

risposta

12

controllare Version ricciolo

CURLOPT_IPRESOLVE è disponibile dal ricciolo 7.10.8

provare questo codice di esempio per testare

<?php 

    $version = curl_version(); 

// These are the bitfields that can be used 
// to check for features in the curl build 
$bitfields = Array(
      'CURL_VERSION_IPV6', 
      'CURLOPT_IPRESOLVE' 
      ); 


foreach($bitfields as $feature) 
{ 
    echo $feature . ($version['features'] & constant($feature) ? ' matches' : ' does not match'); 
    echo PHP_EOL; 
} 

FYI: http://gcov.php.net/PHP_5_3/lcov_html/curl/interface.c.gcov.php

+4

FYI, anche importante notare che CURLOPT_IPRESOLVE e le costanti associate sono definite solo in PHP 5.3 e versioni successive. Se stai eseguendo 5.2, queste costanti non saranno ancora accessibili, anche se la tua versione di libcurl lo supporta (7.10.8, come @Venu sottolinea). Inoltre, anche se definisci le costanti manualmente ('define ('CURLOPT_IPRESOLVE', 113); define ('CURL_IPRESOLVE_V4', 1);'), PHP lo ignorerà, come puoi vedere in 'static int _php_curl_setopt()' funzione nel codice sorgente Venu link a. – Joe