Avatar billede secher35 Nybegynder
08. juni 2011 - 13:03 Der er 6 kommentarer og
1 løsning

fopen tager kun den sidste

Hej der ude. Jeg er igang med at lege med en lille kort applikation til nagios, jeg er desvære bare stadig i begynder stadiet inden for php.
Jeg skal have en fil kaldet marker.php til at loade forskellige informationer fra hosts.cfg men lige nu henter den kun den sidste og ikke de 2 første informationer osse. Kan være det er lidt nemmere at se sig ud af i koden:

Hosts.cfg:
define host {
        host_name                      test1
        alias                          test1
        address                        001.001.001.001
        check_command                  check-host-alive
        use                            WRT-54GL
        notes                          notes latlng:56.618356,8.188022
        register                        1
        }

define host {
        host_name                      test2
        alias                          test2
        address                        002.002.002.002
        check_command                  check-host-alive
        use                            WRT-54GL
        notes                          notes latlng:55.025175,9.409651
        register                        1
        }

define host {
        host_name                      test3
        alias                          test3
        address                        003.003.003.003
        check_command                  check-host-alive
        use                            WRT-54GL
        notes                          notes latlng:55.850638,9.846175
        register                        1
        }


----------------------------------------
marker.php:

<?

if (file_exists("/usr/local/nagios/etc/objects/moire.cfg")) {
  $hosts_file = "/usr/local/nagios/etc/objects/moire.cfg";
} else {
  $hosts_file = "/usr/local/nagios/share/nagmap/hosts.cfg";
}
$fp = fopen($hosts_file,"r");

$comment = ";";

include("status.php");

$s = nagmap_status();

#echo "<pre>";
#print_r($s);

while (!feof($fp)) {
  $line = trim(fgets($fp));
  if ($line && !ereg("^$comment", $line)) {
    if (ereg("^define host{", $line)) {
      $i++;
//      $host[$i] = $i;
    } elseif (!ereg("}",$line)) {
      $line = trim($line);
      $line = preg_replace('/\s+/', ' ', $line);
      $pieces = explode(" ", $line, 2);
      $option = trim($pieces[0]);
      $value = trim($pieces[1]);
      $data[$i][$option] = $value;
    }
  }
}
unset($i);

#echo '<pre>';
#print_r($data);

#hosts definition
foreach ($data as $host) {
  $nagios_host_name = $host["host_name"];
  foreach ($host as $option => $value) {
    $host["host_name"] = str_replace('-','_',$host["host_name"]);
    $host["host_name"] = str_replace('.','_',$host["host_name"]);
    if (($option == "notes") && (ereg("latlng",$value))) {
      $value = explode(":",$value);
      $value = $value[1];
      $option = "latlng";
    };
    if (($option != "latlng") && ($option != "nagios_host_name") && (ereg("-",$value))) {
      $value = str_replace('-','_',$value);
      $value = str_replace('.','_',$value);
      if(($option == "parents") OR ($option == "host_name")) {
        $value = "x".$value;
      };
    };
    $hosts["x".$host["host_name"]]["nagios_host_name"] = $nagios_host_name;
    $hosts["x".$host["host_name"]][$option] = $value;
  };
};
fclose($fp);

//echo "<pre>";
//print_r($hosts);

//put markers and bubbles
foreach ($hosts as $h) {
  if ((isset($h["latlng"])) and (isset($h["host_name"]))) {
    // position the host to the map
    echo("var ".$h["host_name"]."_pos = new google.maps.LatLng(".$h["latlng"].");\n");

    // display different icons for the host (according to the status in nagios
    if (($h["use"] == "wifi_hotspot") && ($s[$h["nagios_host_name"]]["plugin_output"] == "OK")) {
      echo('var '.$h["host_name"]."_mark = new google.maps.Marker({".
        "\nposition: ".$h["host_name"]."_pos,".
        "\nicon: 'http://www.google.com/mapfiles/marker_white.png',".
        "\nmap: map,".
        "\ntitle: \"".$h["nagios_host_name"]."\"".
        "});"."\n\n");
    } elseif ($s[$h["nagios_host_name"]]["plugin_output"] == "OK") {
      echo('var '.$h["host_name"]."_mark = new google.maps.Marker({".
        "\nposition: ".$h["host_name"]."_pos,".
        "\nicon: 'http://www.google.com/mapfiles/marker_green.png',".
        "\nmap: map,".
        "\ntitle: \"".$h["nagios_host_name"]."\"".
        "});"."\n\n");
    } else {
      echo('var '.$h["host_name"]."_mark = new google.maps.Marker({".
        "\nposition: ".$h["host_name"]."_pos,".
        "\nicon: 'http://www.google.com/mapfiles/marker.png',".
        "\nmap: map,".
        "\ntitle: \"".$h["nagios_host_name"]."\"".
        "});"."\n\n");
    };
    //generate google maps info bubble
    $info = '<div class=\"bubble\"><b>'.$h["nagios_host_name"]."</b><br>Type: ".$h["use"]
        .'<br>Address: '.$h["address"]
        .'<br>Parents: '.$h["parents"]
        .'<br>Status: '.$s[$h["nagios_host_name"]]["plugin_output"]
        .'<br><a href=\"/nagios/cgi-bin/statusmap.cgi\?host='.$h["nagios_host_name"].'\">Nagios map page</a>'
        .'<br><a href=\"/nagios/cgi-bin/extinfo.cgi\?type=1\&host='.$h["nagios_host_name"].'\">Nagios host page</a>';
    $links = '<br><a href=\"../cgi-bin/smokeping.cgi?target=LAN.'.$h["nagios_host_name"].'\">Smokeping statistics</a>'
        .'<br><a href=\"../devices/modules/mrtg_uptime/workdir/'.$h["nagios_host_name"].'.html\">Uptime Graph</a>';
    if ($nagmap_bubble_links == 1) {
      $info = $info.$links
        .'<br><span style=\"font-size: 7pt\">Ninki Nagios</span>'
        .'</div>';
    } else {
      $info = $info
        .'<br><span style=\"font-size: 7pt\">Ninki Nagios</span>'
        .'</div>';
    };

    echo("var ".$h["host_name"]."_mark_infowindow = new google.maps.InfoWindow({
      content: '$info'
      })\n");

    echo("google.maps.event.addListener(".$h["host_name"]."_mark, 'click', function() {
      ".$h["host_name"]."_mark_infowindow.open(map,".$h["host_name"]."_mark);
      });\n\n");

  };
};

#echo ("<pre>");
#print_r($hosts);


//create parent connection links
#foreach ($hosts as $h) {
#  if ((isset($h["parents"]) AND (isset($h["latlng"])) AND (isset($hosts[$h["parents"]]["latlng"])))) {
#    echo("\nvar ".$h["host_name"].'_to_'.$h["parents"]." = new google.maps.Polyline({\n".
#      "path: [".$h["host_name"].'_pos,'.$h["parents"]."_pos],\n".
#      "strokeColor: \"#ee1212\",\n".
#      "strokeOpacity: 0.9,\n".
#      "strokeWeight: 2});\n");
#    echo ($h["host_name"].'_to_'.$h["parents"].".setMap(map);\n\n");
#  };
#};

?>


Håber der er nogen der kan hjælpe.
Avatar billede tjens Nybegynder
08. juni 2011 - 14:43 #1
Hvilken del af programmet går det galt i?

Hvad viser f.eks. den print_r($data) du har, efter læsning fra filen?
Avatar billede secher35 Nybegynder
09. juni 2011 - 08:51 #2
Hvis jeg fjerner # foran print_r($data) og loader marker.php får jeg :
---------------------------
Array
(
    [] => Array
        (
            [define] => host {
            [host_name] => test3
            [alias] => test3
            [address] => 003.003.003.003
            [check_command] => check-host-alive
            [use] => WRT-54GL
            [notes] => notes latlng:55.850638,9.846175
            [register] => 1
        )

)
var test3_pos = new google.maps.LatLng(55.850638,9.846175);
var test3_mark = new google.maps.Marker({
position: test3_pos,
icon: 'http://www.google.com/mapfiles/marker.png',
map: map,
title: "test3"});

var test3_mark_infowindow = new google.maps.InfoWindow({
      content: 'test3Type: WRT_54GLAddress: 003.003.003.003Parents: Status: Nagios map pageNagios host pageNinki Nagios'
      })
google.maps.event.addListener(test3_mark, 'click', function() {
      test3_mark_infowindow.open(map,test3_mark);
      });


-----------------
Den skulle jo helst osse hente test1 og test2 parameterne fra hosts.cfg filen.
Avatar billede tjens Nybegynder
09. juni 2011 - 10:18 #3
Det er nok fordi $i ikke er defineret udenfor det scope hvor du har $i++.

Prøv at tilføje en $i = 0; før indlæsnings-loopet.
Avatar billede secher35 Nybegynder
09. juni 2011 - 10:25 #4
Så smider den bare et 0 ind mellem []:
-----------------
Array
(
    [0] => Array
        (
            [define] => host {
            [host_name] => test3
            [alias] => test3
            [address] => 003.003.003.003
            [check_command] => check-host-alive
            [use] => WRT-54GL
            [notes] => notes latlng:55.850638,9.846175
            [register] => 1
        )

)
var test3_pos = new google.maps.LatLng(55.850638,9.846175);
var test3_mark = new google.maps.Marker({
position: test3_pos,
icon: 'http://www.google.com/mapfiles/marker.png',
map: map,
title: "test3"});

var test3_mark_infowindow = new google.maps.InfoWindow({
      content: 'test3Type: WRT_54GLAddress: 003.003.003.003Parents: Status: Nagios map pageNagios host pageNinki Nagios'
      })
google.maps.event.addListener(test3_mark, 'click', function() {
      test3_mark_infowindow.open(map,test3_mark);
      });
--------------------
Avatar billede tjens Nybegynder
09. juni 2011 - 10:29 #5
Så ved du, at den aldrig kommer ind til i++

Så skal du bare finde fejlen i if (ereg("^define host{", $line)) {
Avatar billede secher35 Nybegynder
09. juni 2011 - 10:54 #6
Så fandt jeg ud af at den skal se sådan her ud:
------------
if (ereg("^define", $line)) {
------------
Den kunne åbenbart ikke lide det mellemrum der.

Smid mig et svar og tak for hjælpen.
Avatar billede tjens Nybegynder
09. juni 2011 - 11:04 #7
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester