This commit is contained in:
biosvos
2026-08-07 17:38:18 +09:00
commit 873193a243
9613 changed files with 2755992 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
Revision 0470
-------------------
수정일 : 2011-01-04
수정자 : 노경민
- NEW: SVN 신규 등록
- ISM 관련 RC,VRC,FHS 등록, 삭제관련 command line tools
- PHP로 개발됨
- php, php for mysql 설치 필요(CentOS 경우 yum으로 모두 가능)
- 설치 장비 : 222.122.152.138(양방향 ISM Web서버), /user/ISMCLI/
Revision 0520
-------------------
수정일 : 2011-04-18
수정자 : 김오종
- CHG: 문자수신시 사용할 host_name 필드 추가.
- 수정 파일 : inc/utils.inc
+122
View File
@@ -0,0 +1,122 @@
<?php
define('SQL_ASSOC', MYSQL_ASSOC);
define('SQL_NUM', MYSQL_NUM);
define('SQL_BOTH', MYSQL_BOTH);
define('CRLF', "\r\n");
class dbconnect
{
var $showError;
var $dbc;
function dbconnect($host, $user, $pass, $base, $file = '', $line = 0)
{
if(!$this->dbc = mysql_connect($host, $user, $pass))
{
$error = 'Cannot connect to MySQL server. In file '.$file.' in line '.$line.'. Date: '.date('Y-m-d H:i:s').'<br />'.CRLF;
echo $error;
//die($error);
return ;
}
if(!@mysql_query("USE ".$base, $this->dbc))
{
$error = 'Error <b>'.@mysql_error($this->dbc).'</b> in query <b>'.$query.'</b>. In file '.$file.' in line '.$line.'. Date: '.date('Y-m-d H:i:s').'<br />'.CRLF;
//die($error);
echo $error;
return ;
}
$this->showError = true;
}
function query($query, $file = '', $line = 0)
{
if(!$result = @mysql_query($query, $this->dbc))
{
$error = 'Error <b>'.@mysql_error($this->dbc).'</b> in query <b>'.$query.'</b>. In file '.$file.' in line '.$line.'. Date: '.date('Y-m-d H:i:s').'<br />'.CRLF;
if($this->showError)
{
echo $error;
}
}
return new dbcResult($result);
}
function query_bool($query, $file = '', $line = 0)
{
if(!$result = @mysql_query($query, $this->dbc))
{
$error = 'Error <b>'.@mysql_error($this->dbc).'</b> in query <b>'.$query.'</b>. In file '.$file.' in line '.$line.'. Date: '.date('Y-m-d H:i:s').'<br />'.CRLF;
if($this->showError)
{
echo $error;
}
}
return ($result?true:false);
}
function insert_id()
{
$id = $this->firstCell("SELECT LAST_INSERT_ID() as id");
return $id;
}
function fetch_array($query, $type = SQL_BOTH)
{
$result = $this->query($query);
return $result->fetch_array($type);
}
function first_cell($query)
{
$result = $this->query($query);
$row = $result->fetch_array(SQL_NUM);
return $row[0];
}
function change_base($base, $file = '', $line = 0)
{
if(!$result = @mysql_query('USE '.$base, $this->dbc))
{
$error = 'Error <b>'.@mysql_error($this->dbc).'</b> in query <b>'.$query.'</b>. In file '.$file.' in line '.$line.'. Date: '.date('Y-m-d H:i:s').'<br />'.CRLF;
if($this->showError)
{
echo $error;
}
}
return ($result?true:false);
}
function close()
{
@mysql_close($this->dbc);
unset($this);
}
}
class dbcResult
{
function dbcResult($result)
{
$this->result = $result;
}
function fetch_array($type = SQL_BOTH)
{
return @mysql_fetch_array($this->result, $type);
}
function first_cell()
{
$row = @mysql_fetch_row($this->result);
return $row[0];
}
function num_rows()
{
return @mysql_num_rows($this->result);
}
}
?>
+904
View File
@@ -0,0 +1,904 @@
<?
require_once ("mysql.inc");
// global varialbe
$g_debug = 0;
// Debug Print
function debugPrint( ) {
global $g_debug;
if(!$g_debug)
return;
echo "DEBUG : ";
for( $i= 0 ; $i < func_num_args() ; ++$i ) {
if ( is_array(func_get_arg ( $i )) )
print_r(func_get_arg ( $i ));
else
echo func_get_arg ( $i );
}
echo "\n";
}
//version print
function versionPrint() {
$product_Version = "3.0.1";
$svn_revision = "520";
$date = "20110418172000";
echo "ismcli : $product_Version.$svn_revision-$date\n";
}
// usage print
function usqgePrint($prg) {
echo "Usage: ".$prg." [OPTION] [--] [args...]\n";
echo " ".$prg." -i <user_id> -m <job_type> [--] [args...]\n";
echo " ".$prg." -i <user_id> -m add_rc --rc_name=<rc_name>\n";
echo " ".$prg." -i <user_id> -m add_vrc --rc_name=<rc_name> --vrc_name=<vrc_name> ".
"--svc_ext_type=<vrc_ext_type>\n";
echo " ".$prg." -i <user_id> -m add_fhs --rc_name=<rc_name> --vrc_name=<vrc_name> ".
"--svc_ext_type=<fhs_ext_type> --fhs_name=<fhs_name> --host_name=<host_name> --private_ip=<private_ip> ".
"--publics_ips=<1st_public_ip:2nd_public_ip> \n";
echo " ".$prg." -i <user_id> -m add_fhs --rc_name=<rc_name> --vrc_name=<vrc_name> ".
"--svc_ext_type=<fhs_ext_type> --fhs_list=<file> \n";
echo " ".$prg." -i <user_id> -m del_rc --rc_name=<rc_name> \n";
echo " ".$prg." -i <user_id> -m del_vrc --rc_name=<rc_name> --vrc_name=<vrc_name>\n";
echo " ".$prg." -i <user_id> -m del_fhs --rc_name=<rc_name> --fhs_name=<fhs_name>\n";
echo " -v Version number\n";
echo " -i Specifies the user.\n";
echo " -m Run job_type.\n";
echo " add_rc add rc\n";
echo " add_vrc add vrc\n";
echo " add_fhs add fhs\n";
echo " del_rc delete rc\n";
echo " del_vrc delete vrc\n";
echo " del_fhs delete fhs\n";
echo " args... \n";
echo " --rc_name rc name\n";
echo " --vrc_name vrc name\n";
echo " --fhs_name fhs name\n";
echo " --host_name host name\n";
echo " --svc_ext_type service extend type of fhs or vrc \n";
echo " --private_ip private ip of fhs\n";
echo " --publics_ips public ip of fhs\n";
echo " --fhs_list read list of fhs from file \n";
echo " file fromat : \n";
echo " <fhs_name>:<host_name>:<private_ip>:<publics_1st>:<publics_2nd><CR><LF>\n";
}
// parsing argument list
function parseArgs($argv) {
$options = $argv;
$shortopts = "i:m:D::f:v::";
$longopts = array(
"rc_name:",
"vrc_name:",
"fhs_name:",
"host_name:",
"svc_ext_type:",
"private_ip:",
"publics_ips:",
"fhs_list:",
);
//$options = getopt($shortopts);
$options = _getopt($shortopts, $longopts);
if(empty($options)) {
usqgePrint($argv[0]);
return NULL;
}
// version print
if(!empty($options['v'])) {
versionPrint();
return NULL;
}
// check deboug flag
if(!empty($options['D'])) {
global $g_debug;
$g_debug = 1;
}
// public ip
if(!empty($options['publics_ips']))
{
$pubips = explode(":", $options['publics_ips']);
$options['publics_1st'] = $pubips[0];
$options['publics_2nd'] = "";
if(!empty($pubips[1]))
$options['publics_2nd'] = $pubips[1];
}
// set file read path
if(!empty($options['fhs_list']))
{
$options["read_path"] = $options['fhs_list'];
}
return $options;
}
// check options
function checkopts($options) {
// check id
if( chkvalempty($options, 'i') )
return 1;
switch($options['i']) // strtolower()
{
case 'svc1':
break;
case 'ktics':
break;
case 'op':
break;
default:
echo "ERROR : invalid id : '".$options['i']."'\n";
return 1;
}
// check -f ,-m
if( !empty($options['f']) && !empty($options['m']) )
{
echo "ERROR : Options '-f' can't be used simultaneously with Options '-m'.\n";
return 1;
}
else if(empty($options['f'])) // -m
{
//check mode : ADD_RC, ADD_VRC, ADD_FHS, DEL_RC, DEL_VCR, DEL_FHS
// check mode
if( chkvalempty($options, 'm') )
return 1;
switch($options['m']) // strtolower()
{
case 'add_rc':
// check rc_name;
if(chkvalempty($options,'rc_name'))
return 1;
break;
case 'add_vrc':
// check rc_name;
if(chkvalempty($options,'rc_name'))
return 1;
// check vrc_name;
if(chkvalempty($options,'vrc_name'))
return 1;
// check __svc_ext_type
if(chkvalempty($options,'svc_ext_type'))
return 1;
break;
case 'add_fhs':
// check rc_name;
if(chkvalempty($options,'rc_name'))
return 1;
// check vrc_name;
if(chkvalempty($options,'vrc_name'))
return 1;
if( empty($options["fhs_list"]) )
{
// check fhs_name;
if(chkvalempty($options,'fhs_name'))
return 1;
// check host_name;
if(chkvalempty($options,'host_name'))
return 1;
// check __svc_ext_type
if(chkvalempty($options,'svc_ext_type'))
return 1;
// {Private IP}
if(chkvalempty($options,'private_ip'))
return 1;
// {1st Public IP}
// {2nd Public IP}
if(chkvalempty($options,'publics_ips'))
return 1;
}
else
{
// check __svc_ext_type
if(chkvalempty($options,'svc_ext_type'))
return 1;
// check value fhs_list
if(chkvalempty($options,'fhs_list'))
return 1;
}
break;
case 'del_rc':
// check rc_name;
if(chkvalempty($options,'rc_name'))
return 1;
break;
case 'del_vrc':
// check rc_name;
if(chkvalempty($options,'rc_name'))
return 1;
// check vrc_name;
if(chkvalempty($options,'vrc_name'))
return 1;
break;
case 'del_fhs':
// check rc_name;
if(chkvalempty($options,'rc_name'))
return 1;
if( empty($options["fhs_list"]) )
{
// check fhs_name;
if(chkvalempty($options,'fhs_name'))
return 1;
}
else
{
// check value fhs_list
if(chkvalempty($options,'fhs_list'))
return 1;
}
break;
default:
echo "ERROR : Unkown mode : '".$options['m']."'\n";
return 1;
}
}
else if(empty($options['m'])) // -f
{
// check value
if( chkvalempty($options, 'f') )
return 1;
}
return 0;
}
// check vlaue empty
function chkvalempty(&$o, $name) {
if( empty($o[$name])|| $o[$name] == " " ) {
if(strlen($name) > 1)
echo "ERROR : empty value '--".$name."'\n";
else
echo "ERROR : empty value '-".$name."'\n";
return 1;
}
return 0;
}
// convert to ISM command
function convert2ISMcommand($options) {
$r = array();
$command = array();
$code = array();
switch($options['m']) // strtolower()
{
case 'add_rc':
$code['type'] = 301;
$code['type_name'] = "_ADD_RC";
$command['file_path'] = "/hostservices/physical/".
$options['rc_name']."/".
$options['rc_name'].".cfg";
$command['h_host_name'] = $options['rc_name'];
$command['h_alias'] = "";
$command['use'] = "virtual-ics-host";
$command['check_command'] = "check-rc!\$HOSTNAME$!\$HOSTSTATEID:".
"hg_".$options['rc_name'].":,$";
$command['hostgroups'] = "hg_physical";
$command['address'] = "";
$command['notes'] = "physical";
$command['__related_to'] = "";
$command['__type'] = "RC";
$command['__svc_type'] = "C000";
$command['__svc_ext_type'] = "";
$command['__svc_cont_seq'] = "";
$command['__private_address1'] = "";
$command['__public_address1'] = "";
$command['__public_address2'] = "";
$command['hostgroup_name1'] = "hg_".$options['rc_name'];
$command['alias1'] = $options['rc_name']." hostgroup";
$command['hostgroup_name2'] = "rhg_".$options['rc_name'];
$command['alias2'] = $options['rc_name']." real hostgroup";
$command['s_host_name'] = $options['rc_name'];
$command['service_description'] = $options['rc_name'];
$command['s_use'] = "rc-service";
$command['servicegroups'] = "";
$command['s_notes'] = "physical";
$command['servicegroup_name'] = "";
$command['s_alias'] = "";
break;
case 'add_vrc':
$code['type'] = 304;
$code['type_name'] = "_ADD_VRC";
$vrc_name = $options['vrc_name'].".".$options['rc_name'];
$command['file_path'] = "/hostservices/physical/".
$options['rc_name']."/".
$vrc_name."/".
$vrc_name.".cfg";
$command['h_host_name'] = $vrc_name;
$command['h_alias'] = "";
$command['use'] = "cs-vrc-host";
$command['check_command'] = "check-vrc!\$HOSTNAME$!\$SERVICESTATEID:".
"sg_".$vrc_name.":,$";
$command['hostgroups'] = "hg_".$options['rc_name'];
$command['address'] = "";
$command['notes'] = $options['rc_name'];
$command['__related_to'] = "vhg_".$vrc_name;
$command['__type'] = "VRC";
$command['__svc_type'] = "C001";
$command['__svc_ext_type'] = $options['svc_ext_type'];
$command['__svc_cont_seq'] = "";
$command['__private_address1'] = "";
$command['__public_address1'] = "";
$command['__public_address2'] = "";
$command['hostgroup_name1'] = "hg_".$vrc_name;
$command['alias1'] = $vrc_name." hostgroup";
$command['hostgroup_name2'] = "vhg_".$vrc_name;
$command['alias2'] = $vrc_name.
" virtual hostgroup";
$command['s_host_name'] = $vrc_name;
$command['service_description'] = $vrc_name;
$command['s_use'] = "cs-vrc-service";
$command['servicegroups'] = "";
$command['s_notes'] = $options['rc_name'];
$command['servicegroup_name'] = "sg_".$vrc_name;
$command['s_alias'] = $vrc_name." service group";
break;
case 'add_fhs':
$code['type'] = 307;
$code['type_name'] = "_ADD_FHS";
$vrc_name = $options['vrc_name'].".".$options['rc_name'];
$fhs_name = $options['fhs_name'].".".$options['rc_name'];
$command['file_path'] = "/hostservices/physical/".
$options['rc_name']."/".
$vrc_name."/".
$fhs_name.".cfg";
$command['h_host_name'] = $fhs_name;
$command['h_alias'] = $options['host_name'];
$command['use'] = "cs-fhs-host";
$command['check_command'] = "";
$command['hostgroups'] = "hg_".$vrc_name.
",rhg_".$options['rc_name'];
$command['address'] = $options['publics_1st'];
$command['notes'] = $vrc_name;
$command['__related_to'] = "vhg_".$fhs_name;
$command['__type'] = "FHS";
$command['__svc_type'] = "C001";
$command['__svc_ext_type'] = $options['svc_ext_type'];
$command['__svc_cont_seq'] = "";
$command['__private_address1'] = $options['private_ip'];
$command['__public_address1'] = $options['publics_1st'];
$command['__public_address2'] = $options['publics_2nd'];
$command['hostgroup_name1'] = "vhg_".$fhs_name;
$command['alias1'] = $fhs_name.
" virtual hostgroup";
$command['hostgroup_name2'] = "";
$command['alias2'] = "";
$command['s_host_name'] = $fhs_name;
$command['service_description'] = $fhs_name;
$command['s_use'] = "cs-".$options['svc_ext_type']."-fhs-service";
$command['servicegroups'] = "sg_".$vrc_name;
$command['s_notes'] = $vrc_name;
$command['servicegroup_name'] = "";
$command['s_alias'] = "";
break;
case 'del_rc':
$code['type'] = 302;
$code['type_name'] = "_DEL_RC";
$command['file_path'] = $options['rc_name'].".cfg";
$command['h_host_name'] = $options['rc_name'];
break;
case 'del_vrc':
$code['type'] = 305;
$code['type_name'] = "_DEL_VRC";
$vrc_name = $options['vrc_name'].".".$options['rc_name'];
$command['file_path'] = $vrc_name.".cfg";
$command['h_host_name'] = $vrc_name;
break;
case 'del_fhs':
$code['type'] = 308;
$code['type_name'] = "_DEL_FHS";
$fhs_name = $options['fhs_name'].".".$options['rc_name'];
$command['file_path'] = $fhs_name.".cfg";
$command['h_host_name'] = $fhs_name;
break;
}
$code['user'] = $options['i'];
$r['code'] = $code;
$r['command'] = $command;
return $r;
}
// read file
function filereaddata($path) {
$data = array();
// read
$lines = @file($path);
if(empty($lines)) {
echo "ERROR : file read error. - ".$path."\n";
return NULL;
}
// remove comment(//,#)
foreach ($lines as $line_num => $line) {
$line = rtrim($line);
$debug_str = $line_num." - ".$line;
debugPrint("Read Data :", $debug_str);
$p = preg_split("/[#]|[\/\/]/", $line);
if(!empty($p[0]))
$data[] = $p[0];
}
if(empty($data)) {
echo "ERROR : empty data. - ".$path."\n";
}
return $data;
}
// parsing file read data
function parsefiledata($parstype, $dataes) {
$r = array();
$c = 0;
foreach ($dataes as $line_num => $line) {
debugPrint("parsing....", $line);
$line = $line;
$parse = explode(":", $line);
if(empty($parse))
continue;
switch($parstype) {
case 'add_fhs':
$r[$c]['fhs_name'] = $parse[0];
$r[$c]['host_name'] = $parse[1];
// check
if(empty($parse[2]) || empty($parse[3])) {
unset($r[$c]);
echo "ERROR : parseing data. - ".$line."\n";
continue;
}
$r[$c]['private_ip'] = $parse[2];
$r[$c]['publics_1st'] = $parse[3];
if(!empty($parse[4])) {
$r[$c]['publics_2nd'] = $parse[4];
}
else
$r[$c]['publics_2nd'] ="";
break;
case 'del_fhs':
$r[$c]['fhs_name'] = $parse[0];
break;
}
++$c;
}
if(empty($r)) {
echo "ERROR : empty parseing data.\n";
}
return $r;
}
// set Option
function setOption(&$option, $data)
{
switch($option['m']) {
case 'add_fhs':
$option['fhs_name'] = $data['fhs_name'];
$option['host_name'] = $data['host_name'];
$option['private_ip'] = $data['private_ip'];
$option['publics_1st'] = $data['publics_1st'];
$option['publics_2nd'] = $data['publics_2nd'];
break;
case 'del_fhs':
$option['fhs_name'] = $data['fhs_name'];
break;
}
}
// insert ISM
function insertData($data) {
$r = 0;
$dbConnMySql = new dbconnect('222.122.152.140', 'nagios', 'nagiosakstp',
'nagios', __FILE__, __LINE__);
// chage array to string
$command = implode(";", $data['command'] );
$sql = "INSERT INTO ism_commands ".
"( USERID, REGTIME, COMMAND_TYPE,".
"COMMAND_NAME, COMMAND_ARGS, STATUS, ERRNO ) ".
"VALUES ( '".$data['code']['user']."', NOW(), ".
$data['code']['type'].", '".$data['code']['type_name']."', '".
$command."', 0, 0)";
debugPrint("SQL : ", $sql);
$res = $dbConnMySql->query($sql,__FILE__, __LINE__ );
if( !$res->result )
{
echo "ERROR : Fail to insert data.\n";
$r = 1;
}
$dbConnMySql->close();
return $r;
}
/* Gets options from the command line argument list */
function _getopt ( ) {
/* _getopt(): Ver. 1.3 2009/05/30
My page: http://www.ntu.beautifulworldco.com/weblog/?p=526
Usage: _getopt ( [$flag,] $short_option [, $long_option] );
Note that another function split_para() is required, which can be found in the same
page.
_getopt() fully simulates getopt() which is described at
http://us.php.net/manual/en/function.getopt.php , including long options for PHP
version under 5.3.0. (Prior to 5.3.0, long options was only available on few systems)
Besides legacy usage of getopt(), I also added a new option to manipulate your own
argument lists instead of those from command lines. This new option can be a string
or an array such as
$flag = "-f value_f -ab --required 9 --optional=PK --option -v test -k";
or
$flag = array ( "-f", "value_f", "-ab", "--required", "9", "--optional=PK", "--option" );
So there are four ways to work with _getopt(),
1. _getopt ( $short_option );
it's a legacy usage, same as getopt ( $short_option ).
2. _getopt ( $short_option, $long_option );
it's a legacy usage, same as getopt ( $short_option, $long_option ).
3. _getopt ( $flag, $short_option );
use your own argument lists instead of command line arguments.
4. _getopt ( $flag, $short_option, $long_option );
use your own argument lists instead of command line arguments.
*/
if ( func_num_args() == 1 ) {
$flag = $flag_array = $GLOBALS['argv'];
$short_option = func_get_arg ( 0 );
$long_option = array ();
} else if ( func_num_args() == 2 ) {
if ( is_array ( func_get_arg ( 1 ) ) ) {
$flag = $GLOBALS['argv'];
$short_option = func_get_arg ( 0 );
$long_option = func_get_arg ( 1 );
} else {
$flag = func_get_arg ( 0 );
$short_option = func_get_arg ( 1 );
$long_option = array ();
}
} else if ( func_num_args() == 3 ) {
$flag = func_get_arg ( 0 );
$short_option = func_get_arg ( 1 );
$long_option = func_get_arg ( 2 );
} else {
exit ( "wrong options\n" );
}
$short_option = trim ( $short_option );
$short_no_value = array();
$short_required_value = array();
$short_optional_value = array();
$long_no_value = array();
$long_required_value = array();
$long_optional_value = array();
$options = array();
for ( $i = 0; $i < strlen ( $short_option ); ) {
if ( $short_option[$i] != ":" ) {
if ( $i == strlen ( $short_option ) - 1 ) {
$short_no_value[] = $short_option[$i];
break;
} else if ( $short_option[$i+1] != ":" ) {
$short_no_value[] = $short_option[$i];
$i++;
continue;
} else if ( $short_option[$i+1] == ":"
&&( empty($short_option[$i+2]) || $short_option[$i+2] != ":" )) {
$short_required_value[] = $short_option[$i];
$i += 2;
continue;
} else if ( $short_option[$i+1] == ":" && $short_option[$i+2] == ":" ) {
$short_optional_value[] = $short_option[$i];
$i += 3;
continue;
}
} else {
continue;
}
}
foreach ( $long_option as $a ) {
if ( substr( $a, -2 ) == "::" ) {
$long_optional_value[] = substr( $a, 0, -2);
continue;
} else if ( substr( $a, -1 ) == ":" ) {
$long_required_value[] = substr( $a, 0, -1 );
continue;
} else {
$long_no_value[] = $a;
continue;
}
}
if ( is_array ( $flag ) )
$flag_array = $flag;
else {
$flag = "- $flag";
$flag_array = split_para( $flag );
}
for ( $i = 0; $i < count( $flag_array ); ) {
if ( $i >= count ( $flag_array ) )
break;
if ( ! $flag_array[$i] || $flag_array[$i] == "-" ) {
$i++;
continue;
}
if ( $flag_array[$i]{0} != "-" ) {
$i++;
continue;
}
if ( substr( $flag_array[$i], 0, 2 ) == "--" ) {
if (strpos($flag_array[$i], '=') != false) {
list($key, $value) = explode('=', substr($flag_array[$i], 2), 2);
if ( in_array ( $key, $long_required_value ) || in_array ( $key, $long_optional_value ) )
$options[$key][] = $value;
$i++;
continue;
}
if (strpos($flag_array[$i], '=') == false) {
$key = substr( $flag_array[$i], 2 );
if ( in_array( substr( $flag_array[$i], 2 ), $long_required_value ) ) {
if(empty($flag_array[$i+1]))
$options[$key][] = " ";
else
$options[$key][] = $flag_array[$i+1];
$i += 2;
continue;
} else if ( in_array( substr( $flag_array[$i], 2 ), $long_optional_value ) ) {
if ( $flag_array[$i+1] != "" && $flag_array[$i+1]{0} != "-" ) {
$options[$key][] = $flag_array[$i+1];
$i += 2;
} else {
$options[$key][] = FALSE;
$i ++;
}
continue;
} else if ( in_array( substr( $flag_array[$i], 2 ), $long_no_value ) ) {
$options[$key][] = FALSE;
$i++;
continue;
} else {
$i++;
continue;
}
}
} else if ( $flag_array[$i]{0} == "-" && $flag_array[$i]{1} != "-" ) {
for ( $j=1; $j < strlen($flag_array[$i]); $j++ ) {
if ( in_array( $flag_array[$i]{$j}, $short_required_value ) || in_array( $flag_array[$i]{$j}, $short_optional_value )) {
if ( $j == strlen($flag_array[$i]) - 1 ) {
if ( in_array( $flag_array[$i]{$j}, $short_required_value ) ) {
if(empty($flag_array[$i+1]))
$options[$flag_array[$i]{$j}][] = " ";
else
$options[$flag_array[$i]{$j}][] = $flag_array[$i+1];
$i += 2;
} else if ( in_array( $flag_array[$i]{$j}, $short_optional_value )
/*&& ( empty($flag_array[$i+1]) || ($flag_array[$i+1] != "" && $flag_array[$i+1]{0} != "-"))*/ ) {
//if(empty($flag_array[$i+1]))
// $options[$flag_array[$i]{$j}][] = $flag_array[$i];
//else
//$options[$flag_array[$i]{$j}][] = $flag_array[$i+1];
$options[$flag_array[$i]{$j}][] = TRUE;
$i += 1;
} else {
$options[$flag_array[$i]{$j}][] = FALSE;
$i ++;
}
$plus_i = 0;
break;
} else {
$options[$flag_array[$i]{$j}][] = substr ( $flag_array[$i], $j + 1 );
$i ++;
$plus_i = 0;
break;
}
} else if ( in_array ( $flag_array[$i]{$j}, $short_no_value ) ) {
$options[$flag_array[$i]{$j}][] = FALSE;
$plus_i = 1;
continue;
} else {
$plus_i = 1;
break;
}
}
$i += $plus_i;
continue;
}
$i++;
continue;
}
foreach ( $options as $key => $value ) {
if ( count ( $value ) == 1 ) {
$options[ $key ] = $value[0];
}
}
return $options;
}
function split_para ( $pattern ) {
/* split_para() version 1.0 2008/08/19
My page: http://www.ntu.beautifulworldco.com/weblog/?p=526
This function is to parse parameters and split them into smaller pieces.
preg_split() does similar thing but in our function, besides "space", we
also take the three symbols " (double quote), '(single quote),
and \ (backslash) into consideration because things in a pair of " or '
should be grouped together.
As an example, this parameter list
-f "test 2" -ab --required "t\"est 1" --optional="te'st 3" --option -v 'test 4'
will be splited into
-f
t"est 2
-ab
--required
test 1
--optional=te'st 3
--option
-v
test 4
see the code below,
$pattern = "-f \"test 2\" -ab --required \"t\\\"est 1\" --optional=\"te'st 3\" --option -v 'test 4'";
$result = split_para( $pattern );
echo "ORIGINAL PATTERN: $pattern\n\n";
var_dump( $result );
*/
$begin=0;
$backslash = 0;
$quote = "";
$quote_mark = array();
$result = array();
$pattern = trim ( $pattern );
for ( $end = 0; $end < strlen ( $pattern ) ; ) {
if ( ! in_array ( $pattern{$end}, array ( " ", "\"", "'", "\\" ) ) ) {
$backslash = 0;
$end ++;
continue;
}
if ( $pattern{$end} == "\\" ) {
$backslash++;
$end ++;
continue;
} else if ( $pattern{$end} == "\"" ) {
if ( $backslash % 2 == 1 || $quote == "'" ) {
$backslash = 0;
$end ++;
continue;
}
if ( $quote == "" ) {
$quote_mark[] = $end - $begin;
$quote = "\"";
} else if ( $quote == "\"" ) {
$quote_mark[] = $end - $begin;
$quote = "";
}
$backslash = 0;
$end ++;
continue;
} else if ( $pattern{$end} == "'" ) {
if ( $backslash % 2 == 1 || $quote == "\"" ) {
$backslash = 0;
$end ++;
continue;
}
if ( $quote == "" ) {
$quote_mark[] = $end - $begin;
$quote = "'";
} else if ( $quote == "'" ) {
$quote_mark[] = $end - $begin;
$quote = "";
}
$backslash = 0;
$end ++;
continue;
} else if ( $pattern{$end} == " " ) {
if ( $quote != "" ) {
$backslash = 0;
$end ++;
continue;
} else {
$backslash = 0;
$cand = substr( $pattern, $begin, $end-$begin );
for ( $j = 0; $j < strlen ( $cand ); $j ++ ) {
if ( in_array ( $j, $quote_mark ) )
continue;
$cand1 .= $cand{$j};
}
if ( $cand1 ) {
eval( "\$cand1 = \"$cand1\";" );
$result[] = $cand1;
}
$quote_mark = array();
$cand1 = "";
$end ++;
$begin = $end;
continue;
}
}
}
$cand = substr( $pattern, $begin, $end-$begin );
for ( $j = 0; $j < strlen ( $cand ); $j ++ ) {
if ( in_array ( $j, $quote_mark ) )
continue;
$cand1 .= $cand{$j};
}
eval( "\$cand1 = \"$cand1\";" );
if ( $cand1 )
$result[] = $cand1;
return $result;
}
/* Gets options from the command line argument list */
?>
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/php
<?
require_once ("inc/utils.inc");
//require_once ("inc/utils-devl.inc");
//phpinfo();
// parsing argument list
$options = parseArgs($_SERVER['argv']);
if(empty($options))
exit;
debugPrint("input data: ", $options);
// check options
if(checkopts($options))
exit;
// analyze command
if(empty($options['f'])) // command mode
{
echo "Analyze command.....\n";
$dataes = array();
// read file
if(!empty($options['read_path'])) {
$filedata = array();
$filedata = filereaddata($options['read_path']);
if(empty($filedata))
exit;
// parsing file data
$dataes = parsefiledata($options['m'], $filedata);
if(empty($dataes))
exit;
}
else {
$dataes[] = "empty_data";
}
foreach($dataes as $data) {
if(is_array($data))
{
setOption($options, $data);
}
// convert to ISM command
$command = convert2ISMcommand($options);
debugPrint("ISM command data: ", $command);
// insert ISM
if(!insertData($command))
echo "Success. \n";
}
}
else // file mode
{
echo "File Read.....\n";
// read file
$readdate = filereaddata($options['f']);
if(empty($readdate))
exit;
// analyze read data... Here is implemented in the future.
debugPrint("File read data: ", $readdate);
$data = parsefiledata($readdate);
if(empty($readdate))
exit;
}
?>