2014-01-28 2 views
0

PHP 5.5.8을 실행하는 CentOS 6.4 상자 (2.6.32-431.3.1.el6.i686)에서 이상한 문제가 발생했습니다. 우리는 cURL/libcurl을 버전 7.34로 업그레이드 한 이후 모든 Facebook 앱이 작동을 멈췄습니다. 'curl_exec ($ ch) '를 실행하려고하면 시간이 초과됩니다. 여기) (은 phpinfo의 차이를 참조 (작품 항상 등)Facebook SDK cURL 7.34.0 실패, 7.19.7 작동

다운 그레이드 yum을 사용하고 냠 컬 libcurl에 설치, 나는 오류를 재현 할 수 있었다 : 자세한에 컬을 실행하는

cURL comparison

을 시도 모드로 전송하여 수신 된 데이터를 수신하고 수신합니다.

$opts[CURLOPT_VERBOSE] = true; // enable verbose logging 
$verbose = fopen('php://temp', 'rw+'); 
$opts[CURLOPT_STDERR] = $verbose; 
curl_setopt_array($ch, $opts); 
$result = curl_exec($ch); 
rewind($verbose); 
$verboseLog = stream_get_contents($verbose); 
echo "Verbose information:\n<pre>". htmlspecialchars($verboseLog), "</pre>\n"; 

이 7.19.7에서 작동합니다 :

* About to connect() to graph.facebook.com port 443 (#0) 
* Trying 173.252.101.48... * connected 
* Connected to graph.facebook.com (173.252.101.48) port 443 (#0) 
* Initializing NSS with certpath: sql:/etc/pki/nssdb 
* CAfile: /etc/pki/tls/certs/ca-bundle.crt 
    CApath: none 
* SSL connection using SSL_RSA_WITH_RC4_128_SHA 
* Server certificate: 
* subject: CN=*.facebook.com,O="Facebook, Inc.",L=Palo Alto,ST=California,C=US 
* start date: Oct 28 00:00:00 2013 GMT 
* expire date: Aug 05 23:59:59 2015 GMT 
* common name: *.facebook.com 
* issuer: CN=VeriSign Class 3 Secure Server CA - G3,OU=Terms of use at https://www.verisign.com/rpa (c)10,OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US 
> POST /me HTTP/1.1 
User-Agent: facebook-php-3.2 
Host: graph.facebook.com 
Accept: */* 
Content-Length: 232 
Content-Type: application/x-www-form-urlencoded 

< HTTP/1.1 200 OK 
< Access-Control-Allow-Origin: * 
< Cache-Control: private, no-cache, no-store, must-revalidate 
< Content-Type: application/json; charset=UTF-8 
< ETag: "a4238b670d50df51506644bd20277a7cffbfaa80" 
< Expires: Sat, 01 Jan 2000 00:00:00 GMT 
< Last-Modified: 2014-01-15T13:20:35+0000 
< Pragma: no-cache 
< X-FB-Rev: 1097933 
< X-FB-Debug: ekyERaUVGaiB7H+tLQn1m6sll33KkF8CUhlHGd9/lGs= 
< Date: Tue, 28 Jan 2014 09:51:40 GMT 
< Connection: keep-alive 
< Content-Length: 253 
< 
* Connection #0 to host graph.facebook.com left intact 

할 때

다른 사람이 컬 데이터를 잡을 방법 (쉽게 찾을되지 않았습니다에) 알고 싶어하는 경우 7.34.0과 동일하게, httpd는 100 %로 실행되며 30 초 후 (또는 php.ini에서 설정 한 것) 시간 초과를받습니다. 전혀 자세한 출력이 없으며 시간 만 초과됩니다. Apache error_log에서 찾을 수있는 것이 없습니다.

더 이상 디버깅하는 방법을 알려주세요.

감사합니다, 당신의 위치에없이 당신에게 최대

답변

0

그것의 아주 열심히. 하지만 여전히 여기에 내 제안에서 몇 가지 있습니다. 얼마나 도움이 될지 모르겠습니다.

먼저 기본 컬 코드를 작성하고 example.com 사이트 (예 :)에서 실행하십시오. 그리고 그것이 무엇을 반환하는지보십시오.

위의 코드가 효과적이지 않으면 말풍선 문제입니다.

이제 URL을 https://www.google.com/으로 변경하고 ssl/인증서에 대한 다른 컬 옵션 (기존 코드에서 사용)을 추가하여 동일한 코드를 실행하십시오. 그리고 그것이 무엇인지 확인하십시오. 그것이 작동하지 않는다면, 그때 컬의 SSL 문제.

작동하는 경우 URL을 그래프 api url로 변경하십시오. 그리고 그것이 무엇인지 확인하십시오. 그렇지 않은 경우 사용중인 말림에 대해 CURLOPT_SSLVERSION의 문제가 발생합니다.

마지막으로 위의 코드를 https://www.google.comhttps://graph.facebook ... 사이트에 대해 아래 옵션으로 실행 해 볼 수도 있습니다. 그리고 그들이 어떻게 반응하는지보십시오.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);