サンプル・プログラム
プログラムの解説:マッピング
0064: /**
0065: * IPアドレスかどうか検査する
0066: * @param string $strチェックするテキスト
0067: * @return string IPアドレス/FALSE(IPアドレスではない)
0068: */
0069: function is_ipadr($str) {
0070: $pat = "/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/";
0071: //IPアドレスを表す正規表現
0072: preg_match($pat, $str, $regs);
0073:
0074: //定義域チェック (0 ≦ IP ≦ 255)
0075: for ($i = 1; $i <= 4; $i++) {
0076: if (!isset($regs[$i])) return FALSE;
0077: if ($regs[$i] < 0 || $regs[$i] > 255) return FALSE;
0078: }
0079:
0080: return $regs[0];
0081: }
0082:
0083: /**
0084: * ホスト名どうか検査する
0085: * @param string $strチェックするテキスト
0086: * @return stringホスト名/FALSE(ホスト名ではない)
0087: */
0088: function is_host($str) {
0089: $pat = "/(https?:\/\/)?([\-\_\.\!~\*'\(\)a-zA-Z0-9\;\?\@\&\=\+\$\,%#]+)/";
0090: //URLを表す正規表現
0091: if (preg_match($pat, $str, $regs) != 1) return FALSE;
0092:
0093: return $regs[2];
0094: }
0095:
0096: /**
0097: * IPアドレスをホスト名に、ホスト名をIPアドレスに変換する
0098: * @param int $windowウィンドウID
0099: * @returnなし
0100: */
0101: function convert($window) {
0102: $sour = wb_get_text(wb_get_control($window, IDC_SOUR_EDIT));
0103: $sour = trim($sour); //余計な空白を除く
0104:
0105: if (($ip = is_ipadr($sour)) != FALSE) {
0106: $dest = @gethostbyaddr($ip);
0107: if ($ip == $dest) $dest = FALSE;
0108: } else if (($host = is_host($sour)) != FALSE) {
0109: $dest = @gethostbyname($host);
0110: if ($host == $dest) $dest = FALSE;
0111: } else {
0112: $dest == FALSE;
0113: }
0114: if ($dest == FALSE) $dest = 'エラー:変換に失敗';
0115:
0116: wb_set_text(wb_get_control($window, IDC_DEST_EDIT), $dest);
0117: }
また、メインプログラムの部分をユーザー関数 convert にすることで、イベント処理から呼びやすくした。
コンパイル
参考サイト
- IPアドレスとホスト名を相互変換する:ぱふぅ家のホームページ