2012-07-05 14 views
17

मैं यादृच्छिक अवसरों पर इस त्रुटि मिलती है:फेसबुक पीएचपी एपीआई: "कोई यूआरएल सेट" - यादृच्छिक

Fatal error: Uncaught CurlException: 3: No URL set! 
thrown in /****/****/***/****/facebook/facebook-client/base_facebook.php on line 905 

मैं git भंडार से नवीनतम php एसडीके का उपयोग कर रहा (आज डाउनलोड किया!)। ऐसा होने पर उपयोगकर्ता पहले ही फेसबुक में लॉग इन है।

यह व्यवहार नीले रंग से 2 सप्ताह पहले शुरू हुआ था।

क्या गलत हो सकता है?

अद्यतन: जब मैं डोमेन से जुड़े सभी कुकीज़ हटा देता हूं, तो समस्या हल हो जाती है। मुझे लगता है कि इसे fbm_xxxxxxx और fbsr_xxxxxxxx कुकीज़ के साथ कुछ ठीक से पता नहीं चल रहा है। हालांकि यह अभी भी "यादृच्छिक" मौकों पर वापस आ सकता है, जिससे मुझे उस डोमेन से जुड़े सभी कुकीज़ को साफ़ करने के लिए मजबूर किया जा सकता है।

अद्यतन:

try { 
    $user_profile = $facebook->api('/me'); 
} catch (FacebookApiException $e) { 
    error_log($e); 
    $isfb = null; 
    setcookie('fbm_'.$facebook->getAppId(), '', time()-100, '/', '.mydomain.com'); 
} 

जो अंततः base_facebook.php में इस फ़ंक्शन को कॉल: त्रुटि कोड के इस खंड पर होता है

protected function makeRequest($url, $params, $ch=null) { 
    if (!$ch) { 
     $ch = curl_init(); 
    } 

    $opts = self::$CURL_OPTS; 
    if ($this->getFileUploadSupport()) { 
     $opts[CURLOPT_POSTFIELDS] = $params; 
    } else { 
     $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&'); 
    } 
    $opts[CURLOPT_URL] = $url; 

    // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait 
    // for 2 seconds if the server does not support this header. 
    if (isset($opts[CURLOPT_HTTPHEADER])) { 
     $existing_headers = $opts[CURLOPT_HTTPHEADER]; 
     $existing_headers[] = 'Expect:'; 
     $opts[CURLOPT_HTTPHEADER] = $existing_headers; 
    } else { 
     $opts[CURLOPT_HTTPHEADER] = array('Expect:'); 
    } 

    curl_setopt_array($ch, $opts); 
    $result = curl_exec($ch); 

    if (curl_errno($ch) == 60) { // CURLE_SSL_CACERT 
     self::errorLog('Invalid or no certificate authority found, '. 
        'using bundled information'); 
     curl_setopt($ch, CURLOPT_CAINFO, 
        dirname(__FILE__) . '/fb_ca_chain_bundle.crt'); 
     $result = curl_exec($ch); 
    } 

    // With dual stacked DNS responses, it's possible for a server to 
    // have IPv6 enabled but not have IPv6 connectivity. If this is 
    // the case, curl will try IPv4 first and if that fails, then it will 
    // fall back to IPv6 and the error EHOSTUNREACH is returned by the 
    // operating system. 
    if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) { 
     $matches = array(); 
     $regex = '/Failed to connect to ([^:].*): Network is unreachable/'; 
     if (preg_match($regex, curl_error($ch), $matches)) { 
      if (strlen(@inet_pton($matches[1])) === 16) { 
      self::errorLog('Invalid IPv6 configuration on server, '. 
          'Please disable or get native IPv6 on your server.'); 
      self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; 
      curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
      $result = curl_exec($ch); 
      } 
     } 
    } 

    if ($result === false) { 
     $e = new FacebookApiException(array(
     'error_code' => curl_errno($ch), 
     'error' => array(
     'message' => curl_error($ch)."\n".$opts[CURLOPT_POSTFIELDS]."<br/>".$opts[CURLOPT_URL]."\n", 
     'type' => 'CurlException', 
     ), 
    )); 
     curl_close($ch); 
     throw $e; 
    } 
    curl_close($ch); 
    return $result; 
    } 

जब मैं $opts[CURLOPT_POSTFIELDS] और $opts[CURLOPT_URL], दोनों postfields और यूआरएल गूँजती ठीक से सेट कर रहे थे। क्या यह संभव है कि यह एक सर्वर मुद्दा है?

अद्यतन: अगर मैं कुछ (यादृच्छिक राशि) समय के बाद प्रतीक्षा करता हूं और पृष्ठ को रीफ्रेश करता हूं, तो सब कुछ ठीक है।

+0

यह कॉल करने के लिए पृष्ठभूमि पोस्ट करने के लिए मदद कर सकता है? यानी त्रुटि को ट्रिगर करने के लिए फेसबुक क्लास को क्या कहते हैं? – Robbie

+0

डेवलपर्स.फेसबुक.com/बग्स पर एक बग फाइल करना आपको – phwd

+2

में मदद करनी चाहिए, आप अपने स्वयं के प्रश्न का उत्तर देने का प्रयास कर सकते हैं, यह इस समुदाय के लिए वास्तव में सहायक हो सकता है: पी –

उत्तर

1

यह आईपीवी 6 के साथ समस्याओं के साथ है। यह आप अपने फेसबुक एपीआई में निम्न पंक्ति शामिल करने की ज़रूरत ... हल करने के लिए

if(phpversion() >= 5.3) { 
Facebook::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; 
}; 

कृपया ध्यान दें यह विकल्प केवल PHP के संस्करण 5.3 अप करने के लिए काम करता है, ताकि आप अपने कोड में संस्करण का पता लगाने को शामिल करना सुनिश्चित करना चाहिए।

(सिल्वियो Medice से प्राप्त - Facebook->api("/me") raises "CurlException: 3: No URL set!")

संबंधित मुद्दे