私たちのサイトには、cURL を使用してリモート ドメインから XML データを取得するページがあります。数日前、ランダムに失敗し始めました (おそらくリクエストの 1/3 が失敗します)。私たちのホストとリモート サイトのオペレーターでデバッグした後、curl エラーは「name lookup timed out」であり、DNS の問題を示していることがわかりました。私たちCURLOPT_CONNECTTIMEOUT
は 5 に設定されていました。それを 30 に変更すると、毎回機能しました。
しかし、これはライブ ページです。応答を待っている間、訪問者を 30 秒間ハングさせることはできません。さらに、タイムアウトの増加は、そもそもなぜこれが失敗し始めたのかという質問には答えません。このシステムは何年も前から導入されており、5 秒のタイムアウトは常に問題ありませんでした。
dns_get_record()
さらに、 を実行すると、毎回機能し、有効な IP アドレスをすぐに取得できることがわかりました。そこで、最初に を実行するようにスクリプトを変更しdns_get_record()
、次に、返された IP に cURL を送信します。これにより、cURL の最後で名前検索が回避されます。それはうまくいきますが、ばかげています。
最初の質問ですが、cURL がどのように、またはなぜ失敗するかについて、何か提案はありますか。私たちのホストとリモート サイトのホストはどちらも、それがどこかにある DNS サーバーであることに同意しますが、どちらの DNS サーバーが責任を負っているかについては同意しません。
2 番目の質問は、 + cURLfile_get_contents()
の十分な代替品ですか? dns_get_record()
または、dns_get_record()
代わりに + cURL を使用する必要がありますか?