IPアドレスに解決したい20.000ドメインのリストがあります。私はphpでそれを行うための最速の方法を探しています。
私は使用gethostbynamel()
しましたが、それは遅すぎます。まったく存在しないホストを除外して実行できる別のコマンドを探していますgethostbynamel()
- 私は試し
checkdnsrr("host.com","A")
ましたが、それは遅すぎます。 curl
また、遅すぎます。
IPアドレスに解決したい20.000ドメインのリストがあります。私はphpでそれを行うための最速の方法を探しています。
私は使用gethostbynamel()
しましたが、それは遅すぎます。まったく存在しないホストを除外して実行できる別のコマンドを探していますgethostbynamel()
checkdnsrr("host.com","A")
ましたが、それは遅すぎます。curl
また、遅すぎます。これ以上速くなることはありません。各ドメインに連絡して、それらが利用可能かどうかを確認する必要があります。約 50 ミリ秒の平均往復時間でも、20000 個のドメインすべてをチェックアウトするには 15 分以上必要です。それは、タイムアウトを待つ必要がない場合です。
これをマルチスレッドにすると、速くなります。10 個のサーバーに並行して接続するように 10 個のスレッドを簡単にセットアップできるため、処理時間も 10 分の 1 に短縮されます。
ただし、PHP は実際にはマルチスレッド用に設計されていないため、別のツールを使用することをお勧めします。
しかし、一体なぜ 20.000 のドメインをチェックアウトしたいのでしょうか? それは怪しいものに違いない..
script1.php
<?
if (!$argv[1]) exit;
$ip = gethostbynamel($argv[1]);
// do something
?>
script2.php
<?
$domains = array();
foreach($domains as $domain){
shell_exec("php script1.php $domain");
}
?>
ただし、メモリが不足する可能性があります。
いくつかのアイデア:
アドレスが間違っている可能性があると仮定して、アドレスを解決する前に正規表現を実行して形式を検証してください。
同じドメインに属するアドレスを同様のグループに分類し、そのドメインをアドレスごとではなくグループごとに 1 回チェックする
これは複数回実行する必要がありますか、それとも一度だけ実行する必要がありますか? 複数回の場合は、apc や zend キャッシュなどのキャッシュを使用して IP をキャッシュすることを検討するか、IP を別の方法 (ファイルまたはデータベース) に保存し、その IP が解決するかどうかをテストして、解決しない場合は新しいものを試してください。 DNSコール
タスクを複数のサブタスク (いくつかの php プロセス) に分ける
最速の DNS サーバーを判断し、それを使用します。Pear には、ニーズに合った機能を備えた net dnsパッケージがあります。