Einfach Anwendung mit Mariadb, Apache und PHP

Aus Xinux Wiki
Version vom 16. März 2026, 16:14 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „__TOC__ == Einleitung == Dieses Tutorial beschreibt die Einrichtung eines minimalen Monitoring-Tools auf Basis von '''PHP''', '''MySQL''' und '''Apache2'''. D…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Einleitung

Dieses Tutorial beschreibt die Einrichtung eines minimalen Monitoring-Tools auf Basis von PHP, MySQL und Apache2. Das Ziel ist es, eine Liste von IP-Adressen in einer Datenbank zu verwalten und deren Erreichbarkeit (Ping) automatisch im Browser anzuzeigen.

Voraussetzungen

  • Ein installierter Apache2 Webserver.
  • PHP (inkl. installierter `mysqli` Erweiterung).
  • MySQL/MariaDB Datenbank.
  • Berechtigung zur Ausführung von `exec()` in der `php.ini` (wichtig für den Ping-Befehl).

Datenbankstruktur

Zuerst muss eine Datenbank (z.B. `monitoring`) und die entsprechende Tabelle angelegt werden.

CREATE TABLE IF NOT EXISTS `hosts` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `hostname` VARCHAR(255) NOT NULL,
  `ip_address` VARCHAR(45) NOT NULL,
  `last_check` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Die Umsetzung (PHP)

Die Datei `index.php` übernimmt zwei Aufgaben: Das Auslesen der IPs aus der Datenbank und das Prüfen der Erreichbarkeit mittels ICMP Echo Request.

Der Ping-Mechanismus

Hierbei wird die PHP-Funktion `exec()` genutzt. Um die Seite aktuell zu halten, nutzen wir einen einfachen HTML-Meta-Refresh.

<?php
// Datenbankverbindung
$db = new mysqli("localhost", "user", "passwort", "monitoring");

// Automatische Aktualisierung alle 30 Sekunden
echo '<meta http-equiv="refresh" content="30">';

function checkStatus($ip) {
    // -c 1 = 1 Paket, -W 1 = 1 Sekunde Timeout
    exec("ping -c 1 -W 1 " . escapeshellarg($ip), $output, $result);
    return ($result === 0) ? "ONLINE" : "OFFLINE";
}

$query = $db->query("SELECT * FROM hosts");
?>

Anzeige-Tabelle

Die Ergebnisse werden in einer einfachen HTML-Tabelle dargestellt:

Hostname IP-Adresse Status Letzter Check
Server A 192.168.1.1 Vorlage:Color 12:00:01
Server B 10.0.0.5 Vorlage:Color 12:00:01

Sicherheitshinweise

  • Command Injection: Nutze niemals Benutzereingaben direkt im `exec()` Befehl. Verwende immer `escapeshellarg()`.
  • Performance: Bei vielen IP-Adressen (über 20) wird die Seite langsam, da PHP die Pings nacheinander abarbeitet. In diesem Fall sollte auf ein Hintergrund-Skript (Cronjob) ausgewichen werden.

Siehe auch