2011-12-03 23 views
1

API(JSON形式のデータを返す)からJSONデータを取得するためにこの関数をコーディングしました。PHPでJSONデータを取得するcURL関数

function file_get_contents_curl($url,$json=false){ 
    $ch = curl_init(); 
    $headers = array(); 
    if($json) { 
     $headers[] = 'Content-type: application/json'; 
     $headers[] = 'X-HTTP-Method-Override: GET'; 
    } 
    $options = array(
     CURLOPT_URL => $url, 
     CURLOPT_HTTPHEADER => array($headers), 
     CURLOPT_TIMEOUT => 5, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_HEADER => 0, 
     CURLOPT_FOLLOWLOCATION => 1, 
     CURLOPT_MAXREDIRS => 3, 
     CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)' 
    ); 
    curl_setopt_array($ch,$options); 
    $response = curl_exec($ch); 
    curl_close($ch); 
    if($response === false) { 
     return false; 
    } else { 
     return $response; 
    } 
} 

$応答が実際===falseである場合、それはカールがURLに接続できなかったことを意味するのでしょうか?あるいは、API自体が何も返さなかったかもしれません(しかし、接続は成功しました)?

cURLがURLに正しく接続されているかどうかを確認するにはどうすればよいですか?

答えて

1

PHP curl docは言う:

Return Values

Returns TRUE on success or FALSE on failure. However, if the CURLOPT_RETURNTRANSFER option is set, it will return the result on success, FALSE on failure.

チェックエラーがURL自体が0バイトの場合、何が起こるか、curl_error

+0

を使用してますが?例:example.com/test.txt andufo

+0

空の文字列を返します: ''''、厳密な比較=== –

+0

を使用することを忘れないでください。エラーを事前チェックすることでこれを行います:if($ response === false && curl_error($ ch) – andufo

0

$response === falseの場合、カールに失敗しました。

カールは成功したものの、内容がないことを意味するものではありません。 CURLOPT_RETURNTRANSFERをオンにしているので、応答は文字列として返されます。したがって、内容は$response === ''で示されるべきではありません。

問題が発生するのは、3つではなく2つの等号がある場合です。 3つの場合、型チェックを行っているので、ブール値falseは空の文字列と同じではありません。

関連する問題