2016-08-10 2 views
-1

Cloudant db에 다른 검색 문자열을 정의하고 싶습니다. 하지만 내 컬 기능에는 문제가 있습니다. 뭐가 잘못 보이니?PHP json_decode with curl returning주의 : 비 객체의 속성을 얻으려고 시도합니다.

Notice: Trying to get property of non-object in C:\xampp\... on line 62 

Notice: Trying to get property of non-object in C:\xampp\... on line 68 

Warning: Invalid argument supplied for foreach() in C:\xampp\... on line 68 

라인 (62)은 : (카운트 ($ 응답 -> 행) === 200) {

라인 (68) 인 경우 :

function get_results($url, $bookmark = NULL, $results = array()){ 
    $username = 'name'; 
    $password = 'pw'; 

    $url = $bookmark !== NULL ? $url."&bookmark=$bookmark" : $url; 

    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $r = curl_exec($ch); 

    curl_close($ch); 

    $response = json_decode($r); 

    if(count($response->rows) === 200){ 
     foreach($response->rows as $row){ 
      $results[] = $row->doc; 
     } 
     return get_results($url, $response->bookmark, $results); 
    } else { 
     foreach($response->rows as $row){ 
      $results[] = $row->doc; 
     } 
     return $results; 
    } 
} 

는 I이 경보/통지를 resceive의 foreach을 ($ response-> rows to $ row) {

감사합니다. 당신의 컬의 헤더 옵션 다음에

+0

기본 __debugging__ 알아보십시오. –

+0

$ response의 값을 검사하여 액세스하려는 속성이 포함되어 있는지 확인하십시오. 오류는 존재하지 않는 속성에 액세스하려고한다는 것을 알려줍니다. 예를 들어, $ response-> rows는 'rows'가 $ response에 없다는 것을 알려줍니다. $ response의 값을 설정 한 후에 print_r ($ response)를 시도하십시오. – SheppardDigital

+0

감사합니다. 당신 말이 맞습니다. 그것의 빈. 내 랩톱에서 동일한 PHP 버전과 동일한 xamp 버전이며 작동하지만 PC에서는 작동하지 않습니다 .- 알 수 없습니다. –

답변

0

사용은 JSON 객체를 반환합니다

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json')); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

당신이 고통을 구문 분석 돌아갑니다 있도록 기본 동의 유형은 텍스트/일반이기 때문에. 위의 헤더를 설정하면 json 객체가 수신됩니다.

+0

감사하지만 불행히도 같은 알림 –

+0

다음 json 응답이 없을 수도 있습니다 – mukund

+0

그리고 이미 json 유형을 설정 했으므로 json_decode를 제거해야 할 수도 있습니다 – mukund

-1

알았습니다. 문제는 ssl 인증서입니다. 나는 그것을 사용 중지했다

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

그리고 지금 나는 나의 대답을 얻는다!

+0

실제로 수행중인 작업을 알고 계십니까? 신뢰할 수없는 경로 **에서 사용자 이름과 비밀번호 **를 보냈습니다. [*** Man-in-the-middle attack ***] (https://en.wikipedia.org/wiki/Man-in-the-middle_attack)을 참조하십시오. – mpyw

0

안전 솔루션

  1. 다운로드 libcurl official site에서 최신 cacert.pem.
  2. curl.cainfo을 php.ini에서 편집하고 서버를 재부팅하십시오.
    또는 CURLOPT_CAINFO 옵션을 사용하여 구성하십시오. php.ini 파일에 영구적으로 설정

:

PHP 코드에서 일시적으로 설정
curl.cainfo="/path/to/cacert.pem" 

:

curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem'); 
관련 문제