[PHP] Funktion zur überprüfung ob Eintrag schon in Datei vorhanden ist

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich möchte gerne eine Funktion schreiben, die überprüft ob die neu zu erstellene Definition eines Service mit den Eigenschaften schon in der Datei vorhanden ist.
Erst einmal die Dateien, bevor das Problem kommt.

Services.cfg
define service {
host_name host 1
service_description PING
check_command check_ping00.0,20%!500.0,60%
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
notification_interval 120
contact_groups nagios-admins
check_period 24x7
notification_period 24x7
notification_options c,w,u,r
process_perf_data 0
}

define service {
host_name host 2
service_description PING
check_command check_ping00.0,20%!500.0,60%
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
notification_interval 120
contact_groups nagios-admins
check_period 24x7
notification_period 24x7
notification_options c,u
process_perf_data 1
}
Wie ihr seht unterscheiden sich die beiden Einträge durch die notification_options und process_perf_data.

Per Funktion möchte ich nun aus der Service_Eintragen.php überprüfen ob diese Einstellungen schon vorhanden sind.

Service_Eintragen.php
PHP:
$eintrag = array();
$eintrag["host_name"] = $host_name[0];
$eintrag["service_description"] = $service_description[0];
$eintrag["check_command"] = $check_command[0];
$eintrag["max_check_attempts"] = $max_check_attempts[0];
$eintrag["normal_check_interval"] = $normal_check_interval[0];
$eintrag["retry_check_interval"] = $retry_check_interval[0];
$eintrag["check_period"] = $check_period[0];
$eintrag["notification_interval"] = $notification_interval[0];
$eintrag["notification_period"] = $notification_period[0];
$eintrag["notification_options"] = $not_opt[0];
$eintrag["contact_groups"] = $contact_groups[0];
$eintrag["perf_data"] = $perf_data[0];
So werden die Einträge generiert. und dann mit der Funktion in die CFG-Datei geschrieben. Nun brauche ich eine 2. Funktion die überprüft ob die Einstellungen schon vorhanden sind.

Dies habe ich bereits wie folgt angefangen

Service_Eintragen.php
PHP:
$check=checkEntry("service", $file_services, $eintrag);
Die Argumente:
service -> um das ganze eindeutiger zu definieren
$file_services -> ist die Datei die geöffnet werden soll
$eintrag -> Ist das Array was ich oben geschrieben habe

Und in der Data.php steht folgendes:
Data.php
PHP:
function checkEntry($type, $file, $data)
{
    $parse_array_services = parse_ini_file($file, TRUE);
    foreach($parse_array_services as $key_service=>$array_services)
    {
        if($array_services[host_name]==$data[host_name]){$fehlernummer="1";}
        elseif($array_services[service_description]==$data[service_description]){$fehlernummer="1";}
        und so weiter
    }
return($fehlernummer);
}
Nun scheint es aber so, als ob diese Funktion garnicht funktioniert, denn es wird kein Rückgabewert zurück gegeben. Und auch die If-Abfragen werden nicht richtig gemacht.
Wer kann mir da helfen und eine kleine Funktion schreiben?

Danke für die Mühe.


Gruß
Papenburger
 
parse_ini_file? Also ich hab - zumindest unter Windows - noch keine ini-Datei gesehen, die so aufgebaut ist. Du könntest das Ganze mithilfe eines regulären Ausdruckes + array_diff/in_array/... versuchen!
 
Na gut.
Ich habe male eine weitere Funktion von meinem Vorgänger benutzt um die CFG-Dateie einzulesen. Das klappt auch nur das vergleichen der Werte aus der Datei mit den Werten aus dem Formular und die anschließende Rückgabe des Fehlercodes geht nicht!

PHP:
function checkEntry($data)
{
    global $fehlercode;
    $readcfg=readCfg("service", $file_services, $spez=NULL, $encode=true);
    foreach($readcfg as $key=>$val)
    if($data[host_name]==$val[host_name]){return("001");}
    elseif($data[service_description]==$val[service_description]){return("002");}
    elseif($data[check_command]==$val[check_command]){return("003");}
    elseif($data[max_check_attempts]==$val[max_check_attempts]){return("004");}
    elseif($data[normal_check_interval]==$val[normal_check_interval]){return("005");}
    elseif($data[retry_check_interval]==$val[retry_check_interval]){return("006");}
    elseif($data[notification_interval]==$val[notification_interval]){return("007");}
    elseif($data[contact_groups]==$val[contact_groups]){return("008");}
    elseif($data[check_period]==$val[check_period]){return("009");}
    elseif($data[notification_period]==$val[notification_period]){return("010");}
    else{return("000");}
}

Er soll, vergleichen ob in der gesammten Datei irgendeine Gruppe, die gleichen einstellungen hat. Wenn ja, dann direkt abbrechen und Fehlercode zurückgeben, aber genau das macht er nicht!
Er gibt entweder garnichts zurück oder ab und an mal "000".

Wer weiß warum und wie kann ich das Problem lösen?


MFG
Papenburger