ホームページ  >  記事  >  バックエンド開発  >  curl_exec と wget の実行が遅すぎるため、IPv6 で問題が発生する_PHP チュートリアル

curl_exec と wget の実行が遅すぎるため、IPv6 で問題が発生する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:51:541464ブラウズ

今日phpのcurl関数を使ってみたところ、結果が出るまでに5秒ほどかかり、本当に遅すぎました。ブラウザで同じURLにアクセスすると、すぐにページを取得できます。その後、php がなくても、Linux でネイティブ コマンド wget を使用して Web ページを取得すると、非常に時間がかかることがわかりました。これは本当に奇妙なことですが、プログラムの問題ではなく、ネットワーク設定の問題のようです。
wget を実行すると、DNS ドメイン名解決部分でブロックが発生していることがはっきりとわかります。
$ wget www.myproject.com
--2012-06-18 12:17:30-- http://www.myproject.com/
www.myproject.com を解決中... # ここで約 5 秒間停止しました
192.168.1.187
www.myproject.com|192.168.1.187|:80... に接続中です。
HTTP リクエストが送信され、応答を待っています... 200 OK
長さ: 指定されていない [text/html]
保存先:index.html?

                                                        
2012-06-18 12:17:35 (264 MB/秒) - Index.html を [5200] 保存しました
開発環境を使用しており、ドメイン名は内部 IP に解決されます。奇妙なことに、www.myproject.com に ping を実行すると、すぐに IP アドレスが取得され、ICMP メッセージが返されます。 wget の DNS 解決が非常に遅いのはなぜですか? www.2cto.com
Google や StackOverflow で多くの人がこの質問をしましたが、DNS 逆引きドメイン名解決の問題だと言う人もいれば、ドメイン名をホスト ファイルに追加する必要があると言う人もいます...どれも私の問題を解決しませんでした。不思議に思っていると、先週は IPv6 の日だったのではないかと、運用保守担当者から社内のすべてのネットワークで IPv6 が有効になったとのメールが届きました。これが理由でしょうか?この手がかりを追って調べてみると、案の定、突然判明したのです。
$ wget -4 www.myproject.com
結果は即座に返されました。運用とメンテナンスにより、IPv6 アドレスをこのドメイン名にバインドできなかったようです。ネットワーク全体がアップグレードされた後、ドメインに IPv6 がない場合は、IPv6 が解決されるまで待機します。失敗するとタイムアウトになり、以前と同様にプロセスが IPv4 に移行します。
PHPカールの場合、遅延の問題を解決するには次の文を追加するだけです:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
最近では、多くのサーバーが IPv6 を有効にしていますが、ルーティングがないため実際には機能せず、予期しない問題が発生します。 IPv6 の道のりは長いということを深く理解しています...

http://www.bkjia.com/PHPjc/478164.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478164.html技術記事今日PHPのcurl関数を使っていたところ、結果が得られるまでに5秒ほど待たなければならず、本当に遅すぎることがわかりました。ブラウザで同じURLにアクセスすると、すぐにページにアクセスできます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。