Einfach Anwendung mit Mariadb, Apache und PHP
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…“)
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.