curl_exec()は常にfalseを返します


113

私はこの簡単なコードを書きました:

$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

@LinusKleen curl_error()を回答として投稿した場合、私の問題が何であるかを確認できるように賛成します。
Giles Roberts、

正確には何が問題でしたか?どのエラーがcurl_error()明らかになりましたか?
showdev

回答:


241

エラーのチェックと処理はプログラマの友です。初期化および実行中の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_exec戻り値がFALSEのPHPでのカールのシンプルでストレートなトラブルシューティング。- PHPの例のカール詳細モード
hakre

ええ。長い間これを実際に理解していました。でも答えてくれてありがとう:)
Adithya

7
問題ない。それのための復活バッジを得ました:-)受け入れてくれてありがとう。
Linus Kleen

@marverixよく、彼の名前はLinus:Pです
NinoŠkopac15年

curl_close($ ch);を忘れないでください。
Rafik Bari

10

私の場合は、設定する必要がありますVERIFYHOSTし、VERIFYPEERfalseこのように、:

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

への電話の前にcurl_exec($ch)

自己割り当ての証明書を使用して2つの開発環境間で作業しているためです。有効な証明書VERIFYHOSTを使用VERIFYPEERするfalseと、curl_exec($ch)メソッドが機能して期待どおりの応答が返されるため、設定する必要はありません。


これは実際に私にとって役に立ちました。先端をありがとう!
n8jadams

3

これは昨日私に起こりました。私の場合は、PDFマニュアルに従ってAPIと通信するモジュールを開発していて、マニュアルから直接リンクをコピーしているときに、奇妙な理由でhyphen、コピーされたリンクからのリンクが異なっていましたエンコードし、サーバーと通信できなかったため、curl_exec()常に戻りましfalseた。

ようやく次の登場人物の違いを理解するのに2時間かかりました。

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

ブラウザから直接リンクにアクセスしようとするたびに、のようなものに変換されましたhttps://www.xn--eexample-0m3d.com/api

それらは等しいと思われるかもしれませんが、hyphens ここのエンコーディングを確認すると、最初のhyphen文字がU + 2010で、もう1つがU + 002D であることがわかります。

これが誰かを助けることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.