質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2937閲覧

phpのdns_get_recordの使い方について

jamjam

総合スコア58

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/06/08 07:07

編集2015/06/08 07:10

お世話になります。

phpのdns_get_record()に関する質問です。

DNSのAレコードをチェックするために以下のスクリプトを作成しました。

phpのバージョンは5.3.3です。

第1引数にホスト名、第二引数にDNSのレコードタイプを設定して使う想定です。

lang

1#!/usr/bin/php 2<?php 3$result = dns_get_record($argv[1],$argv[2]); 4print_r($result[0]["ip"]); 5?>

しかし、作成して実際に使用してみると、第2引数でエラーが出てしまいます。

lang

1$./dns_check.php example.com DNS_A 2PHP Warning: dns_get_record() expects parameter 2 to be long, string given in /usr/share/zabbix/scripts/dns_check.php on line 3

以下のように引数ではなく、スクリプト内で「DNS_A」を直接指定するとエラーが出ません。

lang

1#!/usr/bin/php 2<?php 3$result = dns_get_record($argv[1],DNS_A); 4print_r($result[0]["ip"]); 5?>

実行結果

lang

1$./dns_check.php example.com 293.184.216.34

なぜスクリプトを介するとエラーになるか分かりません。

ご教示頂きますよう、宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

第2引数はINTとなっていますので、maisumakunさんの書かれている通り固定か
数値を渡すようにしましょう。
マニュアル

投稿2015/06/08 07:26

icham

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jamjam

2015/06/08 08:15

ichamさんも どうもありがとうございました。
guest

0

ベストアンサー

最初のパターンでは、dns_get_record関数に、DNS_Aという文字列が渡っています。

Aレコード以外を見る必要がないなら、2番めのコードのように決め打ちで問題ないでしょう。

投稿2015/06/08 07:12

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jamjam

2015/06/08 07:40

有難うございます。 DNS_Aという文字列を渡すのがNGなのに、 dns_get_record($argv[1],DNS_A); という使い方がOKなのがわからないのです。上記の「DNS_A」は文字列ではないのですか?
maisumakun

2015/06/08 07:44

はい、コード上では'DNS_A'と引用符でくくれば文字列ですが、引用符のない場合は定数です。別物です。
jamjam

2015/06/08 07:50

定数だったんですね。有難うございました。 後学のために教えてほしいのですが、当初の想定(第2引数でタイプ指定)のように 定数として渡したい場合は、スクリプトをどのように呼び出せばよかったのでしょうか?
maisumakun

2015/06/08 08:03

いちおう、PHPではconstant()関数で名前から定数の値を取得できますが、DNSのレコードは限られていますし、複数受け付ける場合にもarray('A' => DNS_A,'AAAA'=>DNS_A6)のような変換配列を用意しておいて、そこから引いて値を指定するようにするほうが、余計な値が指定される心配もなくていいと思います。
maisumakun

2015/06/08 08:05

すみません、配列の中身が少し間違っていますが、単なるミスです。
jamjam

2015/06/08 08:13

大変勉強になりました。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問