392 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von jensen Einsteiger_in (40 Punkte)

Moin an alle,

da ich von php null Ahnung habe, bräuchte ich mal Eure Hilfe bitte

Ausgangssituation ist eine Outdoorwebcam, die bei Bewegung ein Bild macht und per ftp auf einen webserver ( webcam/images ) speichert. Dabei wird das Bild immer mit "zeitstempel"ch01.jpg gespeichert ( Beispiel 20190131205105ch01.jpg )

Dieses Bild und zwar immer das zuletzt gespeicherte soll aber auf der webseite angezeigt werden, bräuchte dafür aber natürlich einen festen Namen wie z.b. image.jpg.

Gefunden habe ein php script, was per cron-job z.b. alle 5 Minuten angeschoben wird, aber nicht ganz passt zu meiner Situation.

Ausgangssituation zum php-script:

Die Cam erstellt in deinem Ordner "webcam", einen Ordner mit dem aktuellen Datum.
In diesem Ordner befindet sich wiederum ein Ordner "images".
Dort werden die Bilder des heutigen Tages abgelegt, mit vortlaufenden Dateinamen.
Da Du einen festen Dateinamen und einen festen Speicherort deines Webcam Bild brauchst, kommt der Cronjob ins Spiel.
Dieser Cronjob öffnet alle 5min die webcam.php datei. Beim Öffnen wird das aktuellste Bild kopiert, in image.jpg umbenannt und in dem Ordner "webcam" abgelegt.
Zum Schluss werden alle Ordner mit deren Inhalt in dem "webcam" Ordner gelöscht. Dies verhindert ein überlaufen des FTP Servers.

und hier das script dazu:

---------------------------------------------------------------------------------

<?php

// Fester Dateiname des Bildes
$imageName = 'image.jpg';

// Ordnerpfad ermitteln
$path = __DIR__ . '/' . date("Ymd") . '/images/';

// Dateien in Array einlesen
$files = glob($path . '*.jpg');          

// sortieren, jüngstes Datum zuerst
rsort($files);

// jüngstes Bild kopieren falls vorhanden, sonst abbruch
if ( !isset($files[0]) ) {
       echo 'Noch kein Bild vorhanden.';
       exit;
}else{
    copy($files[0], $imageName);    
}
   
// Bilder und Verzeichnisse löschen
//Verzeichnisse einlesen die mit 20 beginnen
$dirs = glob( '20*', GLOB_ONLYDIR);
$numberDirs = count($dirs);

// Durch die Verzeichnisse laufen
foreach ($dirs as $dir){
     $files = glob(__DIR__ . '/' . $dir . '/images/' . '*.*');
     $numberFiles = count($files);
   
    // Durch die Dateien laufen
    foreach ($files as $file){
        unlink($file);
     }
     
     echo 'in Verzeichnis ' . $dir . ', ' . $numberFiles . ' Dateien gelöscht' . "<br>\n";
     rmdir ( __DIR__ . '/' . $dir . '/images');
     rmdir ( __DIR__ . '/' . $dir );
}
echo $numberDirs . ' Verzeichnis/se gelöscht.' . "<br>\n";

?>

--------------------------------------------------------------------------

Meine webcam erstellt eben keinen neuen Ordner mit dem fortlaufenden Datum, sondern das script soll "nur" die neueste Datei im Ordner webcam/images umbenennen in image.jpg und speichern im Ordner webcam und dann alle noch vorhandenen Dateien im Ordner webcam/images löschen.

Ich hoffe mich verständlich ausgedrückt zu haben, danke fürs Lesen und auch für einen Lösungsvorschlag

9 Antworten

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo jensen,

ich denke du musst nur die Zeile

$path = __DIR__ . '/' . date("Ymd") . '/images/';

ersetzen durch

$path = 'webcam/images'

Eventuell musst du noch die Laufwerksbezeichnung davor schreiben, wenn das Script auf einem anderen Laufwerk läuft, als die Bilder abgelegt werden.

Gruß computerschrat
0 Punkte
Beantwortet von jensen Einsteiger_in (40 Punkte)

mhhhh, über diese Zeile hatte ich auch bereits nachgedacht ( wobei mir das __DIR__  so erscheint als wenn es irgendwie gebraucht wird, da das ganz am Ende des scripts ja nochmal auftaucht )

wenn ich die ändere, wie von Dir vorgeschlagen meldet der Browser  :  Parse error: syntax error, unexpected '$files' (T_VARIABLE) in /homepages/............../webcam/webcam.php on line 10

Ich hatte bereits das   . date("Ymd"  testweise mal rausgelöscht, hat aber nichts gebracht
Trotzdem Danke für Deine Antwort, evtl. hast Du ja noch einen Tipp oder jemand anderes kann etwas Licht ins Dunkle bringen
Gruß   Jens

 

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)

Hallo Jens,

__DIR__ ist eine Systemkonstante, die den Pfad zum Ursprung des PHP-Scripts enthält. Siehe auch hier: http://php.net/manual/de/language.constants.predefined.php

Deine Bild-Datei befindet sich vermutlich irgendwo anders. Gib mal den vollständigen Pfad mit Laufwerksbezeichnung hier an, also z.B.: c:webcam/images (sofern webcam in der Root des Laufwerks liegt.

Vielleicht hilft dir auch diese Seite: https://stackoverflow.com/questions/32537477/how-to-use-dir

Im weiteren Verlauf des Scripts muss natürlich das Verzeichnis in gleicher Weise angepasst werden.

Gruß computerschrat
0 Punkte
Beantwortet von jensen Einsteiger_in (40 Punkte)

die webcam.php liegt auch auf dem webserver im Verzeichnis /webcam

die Bilder im Verzeichnis /webcam/images

per cronjob kann ich die webcam.php auch ausführen lassen ( https://domain.de/webcam/webcam.php ) es wird aber kein Bild im ordner webcam erstellt und auch die Bilder im Ordner /webcam/images werden nicht gelöscht sad

Als Antwort wir nur "Noch kein Bild vorhanden" ausgegeben

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hat das PHP-Script Zugriffsrechte auf die von der Webcam abgelegten Bilder?

Gruß computerschrat
0 Punkte
Beantwortet von jensen Einsteiger_in (40 Punkte)
ich gehe davon aus

habe gerade Verzeichnisse und Ordner angelegt, wie die Voraussetzungen für das script es vorgesehen haben, dann wird alles sauber abgearbeitet
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Schau dir doch mal an, was in der Variable $PATH steht, nachdem sie in der Original- und in der modifizierten Form durchlaufen wurden. Daraus kannst du eventuell weitere Schlüsse auf die Fehlerursache ziehen.

Gruß computerschrat
0 Punkte
Beantwortet von jensen Einsteiger_in (40 Punkte)

so, ich habe das script jetzt bisschen abgeändert ( Versuch macht kluch ), es wird nun ein Bild so erzeugt wie ich es haben will und mit einem zweiten script werden alle restlichen Dateien gelöscht smiley Das alles wird per cron job alle 5 Minuten ausgeführt und gut ist.

computerschrat, besten Dank für Deine Hilfe

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Kannst du die Änderungen im Script hier auch noch posten. Falls jemand mit einem ähnlichen Problem über die Suche auf diesen Thread stößt, wäre es schön, wenn er deine Lösung sehen könnte.

Gruß computerschrat
...