2012-02-17 5 views
2

私たちが使用しているAPIに問題があります。ここでphp curl問い合わせ前にURLに到達できるかどうかをチェックします。

は、我々はこの応答時間がなく、年齢のために、(APIの前に何の名前を命名しない)

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://apiurl.com/whatever/api/we/call'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$ch_output = curl_exec($ch); 
curl_close($ch); 

を使用しているコードです。これは私たちのウェブアプリケーションを卑猥に遅くしています。戻り値が悪いため、コードがさらに壊れてしまいます。これは私が修正することはできますが、応答のタイムアウトは修正する方法がわかりません。カールリクエストを実行しようとする前に、URLが「応答中」(端末のpingなど)かどうかをすぐに確認する方法はありますか?

ありがとうございます。

+1

ただし、それ以降は2回目にpingを実行しても応答しない可能性があります。 – Iznogood

+0

ええ、それは良い点です。 –

+0

Pingはここでは何もしません。 pingが存在し、サイトに到達できない可能性があります。逆もまた同様です。 さらに、URLのみのホスト名に対してpingを実行することはできません。 –

答えて

3

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,NUMERIC_TIMEOUT_VALUE);を使用してタイムアウトを設定することを意味しますか?

+0

接続が発生した場合の 'CURLOPT_TIMEOUT'も参照してください。しかし応答は停止します。 – goat

+0

私はそのフラグを使用していませんので、デフォルトのタイムアウトになります。 APIの妥当なタイムアウト値は何でしょうか?現時点でスクリプトは保釈に気を付けるのに1分ほどかかります...私たちは実際にそれを即座に切り捨てる必要があります。何を使用しますか? 400msが短すぎるのでしょうか?長すぎる? –

+0

あなたはそれに数秒を与えることができます。タイムアウトした場合は、しばらくその事実をキャッシュしてください。このようにして、他のスクリプトは、ローカルキャッシュを使用してapiが最近使用できなかったかどうかを確認するための高速チェックを行うことができます。 400msは短く、DNS検索が頻繁に実行される必要があり、400msだけで簡単に実行できますが、誤ってタイムアウトしてもOKです。 – goat

2

最良の選択肢は、カールのタイムアウトをより受け入れやすいレベルに設定することです。 DNSルックアップ、接続タイムアウト、転送タイムアウトなど、いくつかのタイムアウトオプションがあります。詳細はこちらhttp://php.net/manual/en/function.curl-setopt.php

関連する問題