0byt3m1n1
Path:
/
home1
/
aserty
/
public_html
/
cpmage
/
libs
/
phpwhois
/
[
Home
]
File: whois.parser.php
<?php /* Whois.php PHP classes to conduct whois queries Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic Maintained by David Saez (david@ols.es) For the most recent version of this package visit: http://www.phpwhois.org This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ //------------------------------------------------------------------------- function generic_parser_a ($rawdata, $translate, $contacts, $main='domain', $dateformat='dmy') { $blocks = generic_parser_a_blocks($rawdata,$translate,$disclaimer); if (isset($disclaimer) && is_array($disclaimer)) $ret['disclaimer']=$disclaimer; if (empty($blocks) || !is_array($blocks['main'])) { $ret['registered']='no'; return $ret; } $r=$blocks['main']; $ret['registered']='yes'; while (list($key,$val)=each($contacts)) if (isset($r[$key])) { if (is_array($r[$key])) $blk=$r[$key][count($r[$key])-1]; else $blk=$r[$key]; $blk = strtoupper(strtok($blk,' ')); $ret[$val]=$blocks[$blk]; unset($r[$key]); } if ($main) $ret[$main]=$r; format_dates($ret,$dateformat); return $ret; } //------------------------------------------------------------------------- function generic_parser_a_blocks ($rawdata, $translate, &$disclaimer) { $r = array(); $newblock = false; $hasdata = false; $block = array(); $blocks = false; $gkey = 'main'; $dend = false; while (list($key,$val)=each($rawdata)) { $val=trim($val); if ($val != '' && ($val[0] == '%' || $val[0] == '#')) { if (!$dend) $disclaimer[]=trim(substr($val,1)); continue; } if ($val=='') { $newblock=true; continue; } if ($newblock && $hasdata) { $blocks[$gkey]=$block; $block=array(); $gkey=''; } $dend=true; $newblock=false; $k=trim(strtok($val,':')); $v=trim(substr(strstr($val,':'),1)); if ($v=='') continue; $hasdata=true; if (isset($translate[$k])) { $k=$translate[$k]; if ($k=='') continue; if (strstr($k,'.')) { eval("\$block".getvarname($k)."=\$v;"); continue; } } else $k=strtolower($k); if ($k=='handle') { $v = strtok($v,' '); $gkey = strtoupper($v); } if (isset($block[$k]) && is_array($block[$k])) $block[$k][]=$v; else if (!isset($block[$k]) || $block[$k]=='') $block[$k]=$v; else { $x=$block[$k]; unset($block[$k]); $block[$k][]=$x; $block[$k][]=$v; } } if ($hasdata) $blocks[$gkey]=$block; return $blocks; } //------------------------------------------------------------------------- function generic_parser_b ( $rawdata, $items, $dateformat='mdy', $hasreg=true, $scanall=false ) { $r = ''; $disok = true; while (list($key,$val) = each($rawdata)) { if (trim($val) != '') { if (($val[0]=='%' || $val[0]=='#') && $disok) { $r['disclaimer'][] = trim(substr($val,1)); $disok = true; continue; } $disok = false; reset($items); while (list($match, $field)=each($items)) { $pos = strpos($val,$match); if ($pos !== false) { if ($field!='') { $var = '$r'.getvarname($field); $itm = trim(substr($val,$pos+strlen($match))); if ($itm!='') eval($var.'="'.str_replace('"','\"',$itm).'";'); } if (!$scanall) break; } } } } if (empty($r)) { if ($hasreg) $r['registered'] = 'no'; } else { if ($hasreg) $r['registered'] = 'yes'; $r = format_dates($r, $dateformat); } return $r; } //------------------------------------------------------------------------- function getvarname ( $vdef ) { $parts=explode(".",$vdef); $var=""; while (list($fn,$mn)=each($parts)) if ($mn=="") $var=$var."[]"; else $var=$var."[\"".$mn."\"]"; return $var; } //------------------------------------------------------------------------- function get_blocks ( $rawdata, $items, $partial_match = false ) { $r = array(); $endtag=''; while (list($key,$val) = each($rawdata)) { $val = trim($val); if ($val == '') continue; $found = false; reset($items); while (list($field, $match) = each($items)) { $pos = strpos($val,$match); if ($field != '' && $pos !== false) { if ($val == $match) { $found = true; $endtag = ''; $line = $val; break; } $last = substr($val,-1,1); if ($last == ':' || $last == '-' || $last == ']') { $found = true; $endtag = $last; $line = $val; break; } else { $var = getvarname(strtok($field,'#')); $itm = trim(substr($val,$pos+strlen($match))); eval('$r'.$var.'=$itm;'); } } } if (!$found) continue; $block = array(); // Block found, get data ... while (list($key,$val) = each($rawdata)) { $val = trim($val); if ($val == '' || $val == str_repeat($val[0],strlen($val))) continue; $last = substr($val,-1,1); if ($last == $endtag) { // Another block found prev($rawdata); break; } if ($endtag == '' || $partial_match) { //Check if this line starts another block reset($items); $et = false; while (list($field, $match) = each($items)) { $pos = strpos($val,$match); if ($pos !== false && $pos == 0) { $et = true; break; } } if ($et) { // Another block found prev($rawdata); break; } } $block[]=$val; } reset($items); if (empty($block)) continue; while (list($field, $match)=each($items)) { $pos=strpos($line,$match); if ($pos!==false) { $var=getvarname(strtok($field,'#')); eval('$r'.$var.'=$block;'); } } } return $r; } //------------------------------------------------------------------------- function get_contact ( $array, $extra_items='', $has_org= false ) { if (!is_array($array)) return array(); $items = array ( 'fax..:' => 'fax', 'fax.' => 'fax', 'fax -' => 'fax', 'fax-' => 'fax', 'fax::' => 'fax', 'fax:' => 'fax', '[fax]' => 'fax', '(fax)' => 'fax', 'fax' => 'fax', 'tel.' => 'phone', 'tel:' => 'phone', 'phone::' => 'phone', 'phone:' => 'phone', 'phone-' => 'phone', 'phone -' => 'phone', 'email:' => 'email', 'e-mail:' => 'email', 'company name:' => 'organization', 'first name:' => 'name.first', 'last name:' => 'name.last', 'street:' => 'address.street', 'language:' => '', 'location:' => 'address.city', 'country:' => 'address.country', 'name:' => 'name' ); if ($extra_items) $items = array_merge($extra_items,$items); while (list($key,$val)=each($array)) { $ok=true; while ($ok) { reset($items); $ok = false; while (list($match,$field) = each($items)) { $pos = strpos(strtolower($val),$match); if ($pos === false) continue; $itm = trim(substr($val,$pos+strlen($match))); if ($field != '' && $itm != '') { eval('$r'.getvarname($field).'=$itm;'); } $val = trim(substr($val,0,$pos)); if ($val == '') { unset($array[$key]); break; } else { $array[$key] = $val; $ok = true; } //break; } if (preg_match("/([+]*[-0-9\(\)\. x]){7,}/", $val, $matches)) { $phone = trim(str_replace(' ','',$matches[0])); if (strlen($phone) > 8 && !preg_match('/[0-9]{5}\-[0-9]{3}/',$phone)) { if (isset($r['phone'])) { if (isset($r['fax'])) continue; $r['fax'] = trim($matches[0]); } else { $r['phone'] = trim($matches[0]); } $val = str_replace($matches[0],'',$val); if ($val == '') { unset($array[$key]); continue; } else { $array[$key] = $val; $ok = true; } } } if (preg_match('/([-0-9a-zA-Z._+&\/=]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6})/',$val, $matches)) { $r['email'] = $matches[0]; $val = str_replace($matches[0],'',$val); $val = trim(str_replace('()','',$val)); if ($val == '') { unset($array[$key]); continue; } else { if (!isset($r['name'])) { $r['name'] = $val; unset($array[$key]); } else $array[$key] = $val; $ok = true; } } } } if (!isset($r['name']) && count($array)>0) { $r['name'] = array_shift($array); } if ($has_org && count($array)>0) { $r['organization'] = array_shift($array); } if (isset($r['name']) && is_array($r['name'])) { $r['name'] = implode($r['name'],' '); } if (!empty($array)) { if (isset($r['address'])) $r['address'] = array_merge($array,$r['address']); else $r['address'] = $array; } return $r; } //------------------------------------------------------------------------- function format_dates (&$res,$format='mdy') { if (!is_array($res)) return $res; reset($res); while (list($key, $val) = each($res)) { if (is_array($val)) { if (!is_numeric($key) && ($key=='expires' || $key=='created' || $key=='changed')) { $res[$key]=get_date($val[0],$format); } else { $res[$key]=format_dates($val,$format); } } else { if (!is_numeric($key) && ($key=='expires' || $key=='created' || $key=='changed')) { $res[$key]=get_date($val,$format); } } } return $res; } //------------------------------------------------------------------------- function get_date($date,$format) { $months = array( 'jan'=>1, 'feb'=>2, 'mar'=>3, 'apr'=>4, 'may'=>5, 'jun'=>6, 'jul'=>7, 'aug'=>8, 'sep'=>9, 'oct'=>10, 'nov'=>11, 'dec'=>12 ); $parts = explode(' ',$date); if (strpos($parts[0],'@') !== false) { unset($parts[0]); $date = implode(' ',$parts); } $date = str_replace(',',' ',trim($date)); $date = str_replace('.',' ',$date); $date = str_replace('-',' ',$date); $date = str_replace('/',' ',$date); $date = str_replace("\t",' ',$date); $parts = explode(' ',$date); if ((strlen($parts[0]) == 8 || count($parts) == 1) && is_numeric($parts[0])) { $val = $parts[0]; for ($p=$i=0; $i<3; $i++) { if ($format[$i] != 'Y') { $res[$format[$i]] = substr($val,$p,2); $p += 2; } else { $res['y'] = substr($val,$p,4); $p += 4; } } } else { $format = strtolower($format); for ($p=$i=0; $p<count($parts) && $i<strlen($format); $p++) { if (trim($parts[$p]) == '') continue; if ($format[$i] != '-') { $res[$format[$i]] = $parts[$p]; } $i++; } } $ok = false; while (!$ok) { reset($res); $ok = true; while (list($key, $val) = each($res)) { if ($val == '' || $key == '') continue; if (!is_numeric($val) && isset($months[substr(strtolower($val),0,3)])) { $res[$key] = $res['m']; $res['m'] = $months[substr(strtolower($val),0,3)]; $ok = false; break; } if ($key != 'y' && $key != 'Y' && $val > 1900) { $res[$key] = $res['y']; $res['y'] = $val; $ok = false; break; } } } if ($res['m'] > 12) { $v = $res['m']; $res['m'] = $res['d']; $res['d'] = $v; } if ($res['y'] < 70) $res['y'] += 2000; else if ($res['y'] <= 99) $res['y'] += 1900; return sprintf("%.4d-%02d-%02d",$res['y'],$res['m'],$res['d']); } ?>