![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
PHPスクリプトにてホスト名からIPアドレスを取得する際は
getenv()関数を用いるのが一般的だと思うのですが、
名前解決を行うDNSを指定して取得する方法はありますでしょうか。
具体的には、コマンドプロンプトのnslookup時に、
対話形式で「server DNS」で指定できる様な事を
PHPのスクリプトでも実現したいです。
PEARなどのライブラリを使用する方法でもOKですが、
導入予定のサーバーが共用レンタルサーバーの為、
サーバーにソフトをインストールする等の方法は導入が難しいです。
以上、宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
PEARパッケージの Net_DNS を使うと簡単に引けますね。
確か単体利用可能だと思ったので、手元の環境が PHP 5.3.3 で Net_DNS2 を見てみたのですが、幸運にも他のライブラリには依存していなく単体で動作可能のようです。
なので、
http://pear.php.net/manual/ja/package.networking …
より Net_DNS2-1.0.1.tgz を取得して展開。
Net_DNS2-1.0.1/ というフォルダができるので、 Net_DNS2 という名前に変更。
後はFTP等でサーバの任意のディレクトリにアップロードします。
後は利用するときに set_include_path() で設置したディレクトリを include_path に追加します。
サンプルです。
+ public_html/
|
+ Net_DNS2/
+ sample.php
こんな構成にしてみます。
sample.php
<?php
// Net_DNS2 のディレクトリをinclude_path に含める
$libDir = dirname(__FILE__) .DIRECTORY_SEPARATOR .'Net_DNS2';
set_include_path(get_include_path() .PATH_SEPARATOR .$libDir);
// Net_DNS2 を呼ぶ
require_once "Net/DNS2.php";
// google の公開DNSに問合せをする
$r = new Net_DNS2_Resolver(array('nameservers' => array('8.8.8.8')));
try {
// www.google.com の Aレコードを問合せ
$result = $r->query('www.google.com', 'A');
foreach( $result->answer as $rec ) {
echo $rec->name .PHP_EOL;
}
}
catch(Exception $e) {
echo "Faild to query: ", $e->getMessage(), PHP_EOL;
}
こんな感じです。
#この構成ですと、ブラウザからNet_DNS2 にアクセス出来ちゃうので、.htaccess 等で直接アクセスできないよう対策は必要ですね。
#設置場所はよく検討したほうが良いと思いますが、構成が解らないのでとりあえず動きそうなサンプルにしました。
PHP5 より古い場合は Net_DNS の利用になると思います。
ぱっと見た感じ、こちらも単体で動作可能のようです。
http://pear.php.net/package/Net_DNS/
使い方もほぼ同じみたいですよ。
system 関数などでコマンドを実行するのもありですが、結果を自前でパースするのは面倒なので、こちらのほうが結果がオブジェクトになっているので使い勝手がいいかもしれませんね。
No.2
- 回答日時:
getenv()関数ってことは、自身のIPアドレス?
NATを使っていてサーバがプライベートIPだから、DNSを使ってグローバルIPを知りたいとか。
「ホスト名からIPアドレスを取得する際」に一般的なのは、gethostbyname()関数ですが。
http://jp2.php.net/manual/ja/function.gethostbyn …
任意のDNSサーバに対して問い合わせたいなら、Net_DNS_Resolver::query()でできます。
http://pear.php.net/manual/en/package.networking …
<?php
require_once 'Net/DNS.php';
$resolver = new Net_DNS_Resolver();
$resolver->nameservers = array('ns.example.com');
$response = $resolver->query('example.com');
if ($response) {
foreach ($response->answer as $rr) {
$rr->display();
echo inet_ntop($rr->rdata) . "\n";
}
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 インストールしたてのVirtualBoxの仮想マシンにDHCPで割り振られるIPアドレスにつきまして 1 2023/05/03 14:46
- VPN DNS「8.8.8.8」とは何なのでしょうか? 固定 IP アドレスで光回線の代わりに使えますか? 4 2022/10/17 16:30
- ネットワーク 自作のサーバーPCが自宅内のネットワークに接続できない 3 2023/01/24 16:58
- サーバー ネットワーク内のDNSについて 1 2022/12/11 11:13
- VPN 無料のwifiはなぜ危険性高い? VPN プライベートDNSモードにすれば安全? 2 2022/06/04 18:23
- サーバー ネットワークの構成に困っています 3 2023/07/05 11:55
- システム URLがクリックや入力されてから、ブラウザに画面が表示されるまでの間にDNSサーバーは経由されないの 2 2022/06/24 01:15
- Gmail SPFレコードとDNSサーバーについて、gmailを設定できるかどうか 2 2023/06/10 23:55
- その他(コンピューター・テクノロジー) DHCPサーバーについて、、、。 職場のネットワーク環境で困っています。サーバーはWindows s 3 2023/01/04 10:15
- その他(プログラミング・Web制作) このプログラミング誰か教えてくれませんか 4 2022/04/29 15:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fputsで書き込みを行う際に、in...
-
onedrive にexcelファイルをア...
-
別ファイルの変数を呼び出した...
-
PHPの設定で、 エラーが発生し...
-
【PHP】declare命令で”Fatal er...
-
.phpと.incファイルの違いはな...
-
CFileDialogの最初のディレクト...
-
bindValueエラー
-
「@$変数」の「@の意味は?」
-
apache・phpが起動しない・・・
-
フォントの色を変えるには?
-
バッチを用いたフォルダの自動移動
-
MySQLのdatetime型の月日0を削...
-
<A href ~ と一緒に値を渡すには
-
makefile でファイルをコピーす...
-
FTPコマンドでディレクトリごと...
-
TSVファイルをCSV形式に変換したい
-
FTPClientで転送結果(OKかFAIL)
-
PHPファイルの中身が見られるこ...
-
ワードプレスサイト PHP8.0.25...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[PHP] 任意のDNSでIPアドレスを...
-
wordpressのルートのindex.php...
-
すべてのページのurlをindex.ph...
-
PHP/icludeを使った相対パスの...
-
require_onceで読み込む場合、...
-
.htaccessファイルの修正がこれ...
-
CakePHPの表示エラーについて
-
phpによる携帯振り分けとSEOの...
-
相対パスの挙動を理解できない
-
モバイルとPC にエージェン...
-
phpで24時間おきに任意のテキス...
-
ゼンド フレイムワークがどうや...
-
$_GET 取得できない
-
歴史上の人物や宗教
-
PHPでグローバルナビゲーション...
-
PEARを使ったメール送信でのinc...
-
特定のディレクトリだけ、phpを...
-
深い階層のフォルダの作成や削...
-
smartyで同じテンプレートを使...
-
ApacheのRewrite
おすすめ情報