Hallo Profis und Hobbyprogrammierer. Ihr habt mir schon oft aus der Patsche geholfen, jetzt habe ich wieder ein neues Problem.
Unser Verein betreibt auf unserem Motorsportgelände eine Webcam. Die liefert über einen eigenen Router, der eine eigene IP von dyndns.org hat, Bilder auf unseren webspace bei 1&1. Die Kamera reagiert auf Bewegung, ist ziemlich empfindlich eingestellt und schickt in der Regel alle 5 Sekunden ein Bild ab. Von unserem webspace bei 1&1 wird das jeweils aktuellste Bild über eine öffentliche Seite allen Besuchern unserer homepage zur Verfügung gestellt. Diese Seite refresht alle 10 Sekunden über ein java-script.
http://www.msc-werl.de/webcam/webcam.php.
Im Großen und Ganzen funktioniert auch alles. Allerdings treten manchmal zwei Probleme dabei auf:
1. Trotz Abfrage im php-Code kommen 0-Byte-Bilder durch. Die Kamera liefert aus irgendwelchen Gründen Dateien mit 0 Byte Dateigröße. Trotz meiner Abfrage werden die Bilder auf der Webseite ausgegeben, was natürlich nicht toll aussieht.
2. Es gibt Zeitsprünge bei der Ausgabe. ZB. wird ein Bild mit der Dateizeit 10:12:05 (H:i:s) korrekt gezeigt, beim nächsten refresh wird ein Bild mit der Zeit 10:12:01 gezeigt, dann wieder 10:12:10. Das Bild 10:12:05 ist plötzlich verschwunden (mit FTP geprüft) obwohl es vorher gezeigt worden ist. Das könnte natürlich auch ein Fehler der Kamera/Router sein, der die Bilder nicht korrekt speichert.
Oder kann ich an meinem Code noch etwas verbessern?
Ich bin nur ein Hobbyprogrammierer der sich alles selber beibringen musste. Bin für jeden Tipp dankbar !!!
Der vereinfachte Code:
PHP-Code:
<?php
$aktbildzeit = time();
$bildschleife = 0;
do
{
$suchname = "../../../webcam_live/event" . date('YmdHis',($aktbildzeit-$bildschleife)) . "001.jpg"; #da der Dateiname sowieso aus Datum und Zeit besteht, kann direkt nach dem Dateinamen gesucht werden
if ((is_file($suchname)) and (@filesize($suchname)>0)) #gibt es die Datei und ist die Datei größer als 0 Byte (0 Byte-Bilder liefert die Kamera leider auch)
{
$bildname = $suchname; # wenn eine brauchbare bilddatei gefunden wurde, wird der name der variablen $bildname übergeben
$bildschleife = 3000+1; # bei Auffinden einer brauchbaren datei wird $bildsuchschleife hochgesetzt um die do-while schleife vorzeitig zu verlassen
} # ende if is_file
$bildschleife++;
}
while($bildschleife <= 3000); #-----ende do--------------- (maximal werden also 3000 Sekunden rückwärts gesucht)
echo "<img src='$bildname' width='352' height='288' border='0'>\n"; # ausgabe des gefundenen bildes. (im originalcode wird bei Nichtauffinden ein Ersatzbild gezeigt)
?>
# java-script um die seite zu refreshen