2

サイトで XML を解析するために単純な cURL ステートメントを使用しています。API が起動して動作している場合は問題なく動作しますが、何らかの理由で API が停止するとすぐに、サイト全体がクラッシュします。

$url = 'http://www.mydomain.com/webservicexample';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch); 

$xml = new SimpleXmlElement($data);

API から肯定的な応答がある場合にのみ cURL スクリプトを実行するように、URL の周りに配置できる条件はありますか? 次のことを試しましたが、ヘッダーを提供するサーバーの応答がなかったため、機能しませんでした。

$url_headers = @get_headers($url);
if($url_headers[0] == 'HTTP/1.1 200 OK') {

    // do script
}

どんな助け/アドバイスも大歓迎です!

4

2 に答える 2

1

次の戻り値を確認できますcurl_exec()

if (false === ($data = curl_exec($ch))) {
    die("Eek! Curl error! " . curl_error($ch));
}

また、応答ヘッダーも確認してください。

if (200 !== (int)curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
    die("Oh dear, no 200 OK?!");
}
于 2012-12-10T17:55:30.747 に答える
0

結局、CURLOPT_TIMEOUTとCURLOPT_CONNECTTIMEOUTでタイムアウト時間を設定し、curl_errno()を使用してその周りに条件を設定することで、それを機能させることができました。

$ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    $data = curl_exec($ch);

    if(!curl_errno($ch))
    {
        curl_close($ch); 
        $xml = new SimpleXmlElement($data);
        return $xml;
    }
于 2012-12-11T09:04:32.803 に答える