2012-06-27 23 views
13

He estado trabajando en una aplicación de Facebook que utiliza Facebook Graph API para la autenticación, recientemente Facebook se actualizó a IPv6 y mi red no es compatible con IPv6 por lo que todas mis llamadas comenzaron a retornar Host es un error inalcanzable, busqué en errores de Facebook y descubrió que todavía podemos usar forzar las solicitudes a Facebook para usar IPv4 usando CURL CURLOPT_IPRESOLVE.PHP Curl CURLOPT_IPRESOLVE

Ahora, cuando intento enviar la solicitud a la API de Facebook Graph utilizando rizo me sale Aviso: El uso de CURLOPT_IPRESOLVE constante indefinida - asumido 'CURLOPT_IPRESOLVE'

Quiero saber cómo puedo activar el soporte de esta constante o cómo ¿Puedo deshabilitar la compatibilidad con IPv6 en php para poder enviar solicitudes a Facebook Graph API usando IPv4?

Mi código es

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

Gracias

+0

lol, alguien que realmente me odia aquí, -1 en todas mis preguntas, sigue así chaval ... – TilalHusain

+1

Muchas gracias por publicar esta pregunta! Solucionó mis problemas de tiempo de espera. – Steven

Respuesta

12

Comprobar que la versión rizo

CURLOPT_IPRESOLVE está disponible desde rizo 7.10.8

probar este código de ejemplo para probar

<?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

Para su información, también es importante tener en cuenta que el CURLOPT_IPRESOLVE y las constantes asociadas solo se definen en PHP 5.3 y posteriores. Si está ejecutando 5.2, estas constantes no serán accesibles aún, incluso si su versión de libcurl lo admite (7.10.8, como señala @Venu). Además, incluso si define las constantes manualmente ('define ('CURLOPT_IPRESOLVE', 113); define ('CURL_IPRESOLVE_V4', 1);'), PHP lo ignorará, como puede ver en 'static int _php_curl_setopt()' función en el código fuente al que Venu enlaza. – Joe