curl_exec ()는 항상 false를 반환합니다.


114

이 간단한 코드를 작성했습니다.

$ch = curl_init();

//Set options
curl_setopt($ch, CURLOPT_URL, "http://www.php.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$website_content = curl_exec ($ch);

제 경우 $website_content에는 false. 누구든지 잘못 될 수있는 것을 제안 / 조언 할 수 있습니까?


8
curl_error()오류에 대한 자세한 내용을 문의 하고 여기에 게시하십시오.
Linus Kleen 2011

@LinusKleen 답변으로 curl_error ()를 게시하면 내 문제가 무엇인지 볼 수 있도록 upvote 할 것입니다.
Giles Roberts

정확히 무엇이 문제였습니까? 어떤 오류가 curl_error()드러났습니까?
showdev

답변:


242

오류 검사 및 처리는 프로그래머의 친구입니다. cURL 함수 초기화 및 실행의 반환 값을 확인합니다. curl_error()그리고 curl_errno()실패의 경우에 추가 정보를 포함합니다 :

try {
    $ch = curl_init();

    // Check if initialization had gone wrong*    
    if ($ch === false) {
        throw new Exception('failed to initialize');
    }

    curl_setopt($ch, CURLOPT_URL, 'http://example.com/');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt(/* ... */);

    $content = curl_exec($ch);

    // Check the return value of curl_exec(), too
    if ($content === false) {
        throw new Exception(curl_error($ch), curl_errno($ch));
    }

    /* Process $content here */

    // Close curl handle
    curl_close($ch);
} catch(Exception $e) {

    trigger_error(sprintf(
        'Curl failed with error #%d: %s',
        $e->getCode(), $e->getMessage()),
        E_USER_ERROR);

}

* curl_init() 수동 상태 :

성공시 cURL 핸들을, 오류시 FALSE 를 반환 합니다.

매개 변수를 FALSE사용하고 $url도메인을 확인할 수 없을 때 반환되는 함수를 관찰했습니다 . 매개 변수가 사용되지 않으면 함수 가를 반환하지 않을 수 있습니다FALSE . 그러나 매뉴얼에는 실제로 "오류"가 무엇인지 명확하게 설명되어 있지 않으므로 항상 확인하십시오.


9
+1 : curl_execFALSE 반환시 PHP에서 curl에 대한 간단하고 직접적인 문제 해결 . - PHP의 예에서 컬 상세 모드
hakre

네. 실제로 이것을 오래전에 알아 냈습니다. 답변 주셔서 감사합니다 :)
Adithya

7
문제 없어요. 그것에 대한 부흥 배지를 받았습니다 :-) 수락 해 주셔서 감사합니다.
Linus Kleen 2012

잘 @marverix, 그의 이름은 리누스입니다 : P
니노 Škopac

그리고 curl_close ($ ch);
Rafik Bari

10

내 경우에는 내가 설정해야합니다 VERIFYHOSTVERIFYPEERfalse이 같은 :

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

에 전화하기 전에 curl_exec($ch).

자체 할당 된 인증서를 사용하여 두 개발 환경간에 작업하고 있기 때문입니다. 유효한 인증서로 설정할 필요가없는 VERIFYHOSTVERIFYPEERfalse때문에 curl_exec($ch)방법이 작동하고 예상 한 응답을 반환합니다은.


이것은 실제로 나에게 유용했습니다. 팁 고마워!
n8jadams 19

3

이것은 어제 저에게 일어 났고 제 경우에는 API와 통신하기 위해 일부 모듈을 개발하기 위해 PDF 매뉴얼을 따르고 있었고 매뉴얼에서 직접 링크를 복사하는 동안 이상한 이유로 hyphen복사 된 링크에서 다른 인코딩 및 따라서 서버와 통신 할 수 없기 때문에 curl_exec()항상 반환 false되었습니다.

아래 문자의 차이점을 마침내 이해하는 데 몇 시간이 걸렸습니다.

https://www.e‐example.com/api
https://www.e-example.com/api

브라우저에서 직접 링크에 액세스하려고 할 때마다 https://www.xn--eexample-0m3d.com/api.

동일하게 보일 수 있지만 hyphens 여기서 인코딩을 확인 하면 첫 번째 hyphen는 유니 코드 문자 U + 2010 이고 다른 하나는 U + 002D 임을 알 수 있습니다.

이것이 누군가를 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.