2012年1月26日木曜日

PHP:PDO で IPv6 の DNS に探しに行かせない方法

開発用サーバーでデバッグの終わったプログラムを本番サーバーにデプロイしたら、Web API の呼び出しに5秒のもかかるようになった。

 調べてみると本番サーバは IPv6 対応で、PDO が名前解決のために、まず IPv6 の DNS を呼び出し、見つからない場合にそこがタイムアウトしてから IPv4 の DNS を呼び出すらしいことと判明。

 解決策は PDO のオプションに

curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

 を追加。

 libcurl を使う、他の言語でも使えそう。

 ちなみに探した時点では google で 'CURL_IPRESOLVE_V4' を検索しても日本語のページは見つからなかった。