Stand 28.11.2024
Hier ein Update des Skripts, im wesentlichen mit folgender Ergänzung:
- automatische E-Mail an den Admin, falls um 5 Minuten nach Mitternacht kein aktuelles Kamerabild gefunden wird
<?php
// aktuellstes Webcambild einer INSTAR Kamera aus einem Ordner ermitteln, mit einem Logo
// versehen und dem Browser als JPG übergeben
//
// Alarm wird nur ausgegeben, wenn kein Stopfile stop-admin-email.txt im Skripverzeichnis existiert
// das Stopfile stop-admin-email.txt wird beim ersten Alarm gesetzt
// hier die eigenen Parameter einstellen
$_folder_name = "pfad/ordner"; // Ordnername fuer die Webcambilder mit Datum Unterordner, ausgehend vom Root Verzeichnis
// $_fixed_filename = "fixer-dateiname.jpg"; // falls Verwendung eines fixen Dateinamens fuer aktuelles Webcambild
$_fixed_filename = false; // false wenn die neuste Datei gesucht werden soll, ansonst den festen Dateinamen angeben
$_logo_path = "pfad1/pfad2/webcam"; // Pfad zum Logo
$_logo_name = "logo-300.jpg"; // Dateiname des Logos im JPG Format
// $_logo_name = false; // false setzten, wenn kein Logo auf Bild soll, ansonsten Dateinamen angeben
$_text = "Text für die Bildmitte oben"; // Text der oben mittig aufs Bild soll
// $_text = false; // false setzten, wenn kein Text aufs Bild soll
$_admin_email = "amin_email@emaildomain.de"; // wm01
// Website root absolut ermitteln, war für Provider Strato erforderlich
$website_root = substr($_SERVER['DOCUMENT_ROOT'], 0, strpos($_SERVER['DOCUMENT_ROOT'], "root_ordner"));
//
// hier geht es mit dem Verarbeiten los - keine Änderungen danach durchführen
//
$bild = true;
$bild_url = $website_root . $_folder_name . "/" . date("Ymd") . "/images/";
// festen Dateinamen benutzten oder die neuste Datei ermitteln
if ($_fixed_filename) { // fester Dateiname für aktuellstes Bild des Tages auswählen
$bild_url = $bild_url . $_fixed_filename ;
} else { // neuste Datei im Ordner finden
$dir = $bild_url;
if (file_exists($dir)) {
$images = glob($dir . "*.jpg"); // Return an array of filenames or directories that matches the specified pattern
// print_r($images);
rsort($images);
// ACHTUNG: es wird nach den Dateinamen absteigend sortiert. D.h bei Instar fangen alle geplanten
// Aufnahmen mit dem Buchstaben P an. Wenn sich eine sonstige Datei mit einem Buchstaben nach dem P
// in dem Ordner befindet wird diese Datei ausgegeben!
$bild_url = $images[0];
} else {
$bild = false; // wenn kein Verzeichnis vorhanden, daher auch keine Bilder *** TODO E-Mail an Admin???
}
}
//$bild = false;
if ($bild) { # Webcambild gefunden?
$dest = imagecreatefromjpeg($bild_url);
}
else { # kein Webcambild, daher eigenes Fehlerbild generieren
$errorbild = imagecreatetruecolor(1920, 1080); // Bildfläche für Text erzeugen
$white = imagecolorallocate($errorbild, 255, 255, 255);
$black = imagecolorallocate($errorbild, 0, 0, 0);
imagefilledrectangle($errorbild, 0, 0, 1920, 1080, $white); // Bildfläche mit Rechteck füllen
$font = $website_root . "/fonts/arial.ttf";
imagettftext($errorbild, 40, 0, 500, 500, $black, $font, "aktuell kein Webcambild gefunden."); // Text auf Bildfläche schreiben
$dest = $errorbild;
// Fehler: E-Mail an Admin, aber nur 1x
if(!file_exists('stop-admin-email.txt') AND // kein Stopfile da? damit Alarm nicht unendlich
time() > strtotime(date("d.m.Y").' +5 minutes') ) // min. 5 Min. nach Mitternacht
{
mail($_admin_email, 'Fehler Webcam', 'kein Webcambild gefunden unter: '.$bild_url.' für weitere E-Mails die Datei stop-admin-email.txt im Scriptverzeichnis löschen.', 'From: Webcam <'.$_admin_email.'>'); // wm01
touch('stop-admin-email.txt');
}
}
// Logo mit Bild verschmelzen oder nicht?
if ($_logo_name) {
$logo = $website_root . $_logo_path . "/" . $_logo_name;
// Bilder für Mergefunktion vorbereiten
$logofile = imagecreatefromjpeg($logo);
imagecopymerge($dest, $logofile, 1610, 907, 0, 0, 300, 163, 75); // Bild mit Logo verschmelzen
// hier eventuell Position und Größe des Logos anpassen !!!
};
// Text aufs Bild?
if ($_text) {
$im = imagecreatetruecolor(830, 36); // Bildfläche für Text erzeugen
$white = imagecolorallocate($dest, 255, 255, 255);
$black = imagecolorallocate($dest, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 830, 36, $black); // Bildfläche mit Rechteck füllen
$font = $website_root . "/fonts/arial.ttf";
imagettftext($im, 20, 0, 6, 26, $white, $font, $_text); // Text auf Bildfläche schreiben
imagecopymerge($dest, $im, 545, 00, 0, 0, 830, 36, 40); // Webcambild mit Textbild verschmelzen
// Position: Mitte 1920/2 - 830/2 = 545
};
// Daten als JPG Bild an den Browser übergeben
$ts = gmdate("D, d M Y H:i:s") . " GMT";
header("Expires: $ts");
header("Last-Modified: $ts");
header("Pragma: no-cache");
header("Cache-Control: no-cache, must-revalidate");
header("Content-type: image/jpeg"); // nun sagen wir dem Browser, dass er eine JPG-Datei erhält
// Das Bild ausgeben
imagejpeg($dest);
?>