Hallo Community,
Bei meiner Parameterverarbeitung mittels getopt() habe ein Problem.
Wenn ich in meinem String einen unzulässigen Parameter einfüge bricht getopt() die Parameter auswertung an dieser Stelle ab und verarbeitet nur die vorherigen Parameter.
aktueller Programmcode:
korrekte Eingabe wäre:
Bei falschen Parametern wie z.B.
Wird die Meldung
ausgegeben und die Variable $arrayelements enthält lediglich 6 Elemente.
Alle Parameter nach -k werden ignoriert.
Wie kann ich bei falsche Parameter abfangen um eine Fehlerbehandlung durchzuführen. (z.B. Message an User: "Parameter -k nicht zulässig")?
Bin auf die Funktion
gestoßen, allerdings weiß ich nicht wie ich damit mein Array nur auf zulässige Keys prüfen kann.
Hab überlegt ob man über die Negierung der Funktion
mittels foreach-Abfrage alle Keys prüft und wenn ein nicht zulässiger Parameter auftaucht dies an den User meldet.
Vielen Dank im vorraus für die Hilfe.
Bei meiner Parameterverarbeitung mittels getopt() habe ein Problem.
Wenn ich in meinem String einen unzulässigen Parameter einfüge bricht getopt() die Parameter auswertung an dieser Stelle ab und verarbeitet nur die vorherigen Parameter.
aktueller Programmcode:
PHP-Code:
#!/usr/bin/php
<?PHP
define('OK', 0);
define('WARNING', 1);
define('CRITICAL', 2);
define('UNKNOWN', 3);
$shortopts = "";
$shortopts .= "H:"; // hostname
$shortopts .= "u:"; // database_user
$shortopts .= "p:"; // database_passwort
$shortopts .= "d:"; // database_name
$shortopts .= "q:"; // query
$shortopts .= "r:"; // regex
$shortopts .= "w:"; // warningvalue
$shortopts .= "c:"; // criticalvalue
$shortopts .= "s:"; // string switch
$arrayOptions = getopt($shortopts);
if (count($arrayOptions) == 0)
{
echo"USAGE\n";
echo"******\n";
echo"\n";
echo"-H = hostname \n";
echo"-u = database User \n";
echo"-p = database password \n";
echo"-d = database \n";
echo"-q = SQL-query \n";
echo"-r = regular expression \n";
echo"-w = warning value \n";
echo"-c = critical value \n";
echo"-s = string switch [0 = only numbers in regex allowed; 1 = regex can also contain a string] \n";
exit(UNKNOWN);
}
elseif (count($arrayOptions) < 9)
{
$arrayelements = count($arrayOptions);
echo "$arrayelements /n";
echo "Some Parameters missing!";
exit(UNKNOWN);
}
try
{
$db = new PDO("mysql:host=$arrayOptions[H];dbname=$arrayOptions[d];charset=utf8", "$arrayOptions[u]", "$arrayOptions[p]");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $p)
{
echo" No connection established.";
}
$query_result = $db->query($arrayOptions['q']);
$result = $query_result->fetch(PDO::FETCH_ASSOC);
$db = null;
$result_regex= preg_grep("/$arrayOptions[r]/",$result);
foreach($result_regex as $key=>$value)
{
if($arrayOptions['s'] == 0)
{
if($value >= $arrayOptions['c'])
{
echo"CRITICAL: <$value>\n ";
exit(CRITICAL);
}
elseif($value >= $arrayOptions['w'])
{
echo"WARNING: <$value>\n ";
exit(WARNING);
}
else
{
echo"OK: <$value>\n ";
exit(OK);
}
}
if($arrayOptions['s'] == 1)
{
if(strcmp ($value, $arrayOptions['c']) !=0)
{
echo"CRITICAL: <$value>\n ";
exit(CRITICAL);
}
elseif(strcmp ($value, $arrayOptions['w']) !=0)
{
echo"WARNING: <$value>\n ";
exit(WARNING);
}
else
{
echo"OK: <$value>\n ";
exit(OK);
}
}
else
{
echo"Parameter -s only 0|1 allowed.";
}
}
?>
Code:
./test.php -H 127.0.0.1 -u test -p test -d test -q "select * from testdb" -r [0-9] -w 10 -c 5 -s 0
Code:
./test.php -H 127.0.0.1 -u test -p test -d test -q "select * from testdb" -r [0-9] -k 7 -w 10 -c 5 -s 0
Code:
Some Parameters missing!
Alle Parameter nach -k werden ignoriert.
Wie kann ich bei falsche Parameter abfangen um eine Fehlerbehandlung durchzuführen. (z.B. Message an User: "Parameter -k nicht zulässig")?
Bin auf die Funktion
PHP-Code:
array_keys
Hab überlegt ob man über die Negierung der Funktion
PHP-Code:
array_keys
Vielen Dank im vorraus für die Hilfe.
Kommentar