2016-08-10 7 views
-1

Cloudant dbに異なる検索文字列を定義したいと思います。しかし、私のカール機能には問題があります。あなたは間違ったことを見ますか?PHP json_decode with curl returning注意:非オブジェクトのプロパティを取得しようとしています

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; 
    } 
} 

私はこの警告/通知をresceive:

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は、次のとおりです。foreachの($ response-> rows to $ row){

ありがとう!あなたのカールのヘッダーオプション以下

+0

は基本__debugging__こちらをご覧ください。 –

+0

$ responseの値をチェックして、アクセスしようとしているプロパティが含まれていることを確認しましたか?エラーは、存在しないプロパティにアクセスしようとしていることを伝えています。たとえば、$ response-> rowsの場合、$ rowsに 'rows'が存在しないことを示しています。 $ 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')); 

それはあなたが刺さを解析され返されますので、デフォルトをそのままタイプがtext/plainであるため。上記のヘッダーを設定することにより、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'); 
関連する問題