• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Webcam: Überschreibung Dateiname bei Upload auf FTP Server

zoomzoom1

Neues Mitglied
Hallo zusammen,
per Zufall stieß ich auf der Suche nach genau so einem Script auf diesen Thread https://www.html.de/threads/uebersc...pload-auf-ftp-server.58044/page-3#post-408328. Daher möchte ich das Thema hochbefördern und meine herzliche Bitte nach Unterstützung loswerden.

Meine Kamera schreibt im eingestellten Takt die Bilder nach folgendem Schema in einen täglich neuen Ordner:

/webcam/meineKamera/snap/2022-02-28/SNAP00T-20220228-235907.jpg
/webcam/meineKamera/snap/2022-02-28/SNAP00T-20220228-235937.jpg
/webcam/meineKamera/snap/2022-03-01/SNAP00T-20220301-000007.jpg
usw...

Das Script soll das aktuellste Bild nehmen, einen neuen Namen vergeben und in das Verzeichnis der Homepage schieben, mit diesem Pfad etwa:

/meineHomepage/webcam/aktuelles-bild.jpg

Anschließend noch das zyklische neu laden der Seite. Danach können alle Dateien und Ordner der Kamera gelöscht werden.

Wie muss das Ganze angestellt werden?

Schon mal vielen herzlichen Dank an die Fachleute hier!!
Gruß
Dirk
 
Werbung:
Hallo m.scatello,
danke für die schnelle Antwort. Das mit dem anpassen der Pfade ist ja mein Problem. Deshalb meine Anfrage hier. Vielleicht könntest Du dabei behilflich sein?
Der Ordner webcam mit allen Unterverzeichnissen liegt im Root des Webspace wo auch die einzelnen Verzeichnisse der verschiedenen Homepage sind.
 
Zuletzt bearbeitet:
Werbung:
Okay, aber
1. wo schreibt das Skript denn das aktuelle jpg hin und
2. wie rufe ich das Script auf, wenn es nicht im eigentlichen Webspace liegt? Ich kann es ja so nicht aufrufen: meinehomepage.de/script.php weil es ja dort nicht gefunden wird...
 
Werbung:
Also: wie ich in meinem ersten Post geschrieben habe, legt die Kamera die Bilder auf der allerersten Ebene sozusagen in einem Ordner webcam alles ab. Auf der gleichen Ebene liegt das Script. Ebenfalls auf dieser Ebene gibt es einen Ordner, der die Webseite meinehomepage.de enthält. Bei allinkl meinem Provider ist das so geregelt, dass ich dann einstelle, in welchem Verzeichnis die Homepage liegt. Wenn also dort eingestellt ist, das die Webseite im Verzeichnis meinehomepage liegt und Dein Script eine Ebene höher (also ausserhalb dieses Verzeichnisses), dann wird das Script eben nicht gefunden, wenn ich meinehomepage.de/script.php aufrufe. Also was muss ich hier machen, damit es klappt?
 
Vielen Dank.
Der Verzeichnisbaum sieht bei mir so aus:
cgi-bin
logs
tools
usage
meinehomepage
webcam

Das Script liegt im Verzeichnis meinehomepage.

Ich habe diese Erläuterung https://wiki.selfhtml.org/wiki/HTML...adangaben_relativ_zum_Basis-URI_referenzieren durchgelesen und verstehe danach, das im Script deshalb jetzt das stehen soll

$aktuell ="webcam/aktuelles-bild.jpg";

$dir = "../webcam/meinekamera/snap/";

Wenn ich Dich richtig verstehe, bedeutet $dir für das Script: ausgehend vom Speicherort des Scripts gehe eine Ebene höher, dort in das Verzeichnis webcam in das Verzeichnis meinekamera in das Verzeichnis snap und dann erstelle aus dem aktuellesten Bild eine neue Datei mit Namen aktuelles-bild.jpg und gehe wiederum vom Speicherort des Scripts ausgehend in das Verzeichnis webcam und speichere es ab. Danach lösche alles im $dir.

Habe ich das nun richtig auf dem Schirm? Es passiert nicht wirklich etwas...

 
Werbung:
Habe ich das nun richtig auf dem Schirm?
Ich denke ja.
Es passiert nicht wirklich etwas
Das ist natürlich eine tolle Problembeschreibung.

Da ich deine Verzeichnisstruktur so nicht auf meinem Rechner habe (und auch nicht nachbauen will), wirst du wohl selber debuggen müssen.

Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
das war superschnell, danke!!

Ich habe zunächst die Befehle 2.+3. im Script eingegeben und erhalte folgende Fehler

Warning: unlink(webcam/aktuelles-bild.jpg): No such file or directory in /www/htdocs/w019xxx/meinehomepage/webcam.php on line 58

Warning
: rename(,webcam/aktuelles-bild.jpg): No such file or directory in /www/htdocs/w019xxx/meinehomepage/webcam.php on line 64

Zunächst weiß ich nicht, warum bei der 2. Fehlermeldung (,webcam/aktuelles-bild.jpg) steht. Ich verstehe Zeile 58 so (und das passiert m.E. auch bei Aufruf des Scripts), dass zuerst die Datei aktuelles-bild.jpg verschwindet und weil er dann nicht umbenennen kann kommt Fehler Zeile 64.
 
Warning: unlink(webcam/aktuelles-bild.jpg): No such file or directory in /www/htdocs/w019xxx/meinehomepage/webcam.php on line 58
Das kann doch nur bedeuten, dass bei
PHP:
$aktuell ="webcam/aktuelles-bild.jpg";
auch die 2 Punkte und der Slash fehlt
Warning: rename(,webcam/aktuelles-bild.jpg): No such file or directory in /www/htdocs/w019xxx/meinehomepage/webcam.php on line 64
Und das dürfte auch damit zusammenhängen.

Etwas Mitdenken wäre nicht schlecht.
 
Werbung:
PHP:
<?php
 
    // Funktion zum lesen der Dateinamen und Zeitstempel
    function getFiles($dir, $exclusions)
    {
       $result = array();
      
       // Dateinamen einlesen   
       $files = glob($dir . "*.jpg");
 
       // Dateinamen und Zeitstempel
       foreach ($files as $file)
       {
         // Wenn die Datei nicht in den Ausschlüssen ist
         if (! in_array($file, $exclusions))
            $result[$file] = filemtime($file);
       }
    
       /* Das Array sieht an dieser Stelle jetzt so aus:       
       array( 'dateiname1' => 'zeitstempel1',
              'dateiname2' => 'zeitstempel2',
              'dateiname3' => 'zeitstempel3',
              etc...
             )
       */
      
       // jetzt das Array sortieren
       natsort($result);
 
       // Array zurueckliefern
       return $result;
    }
 
    // Aktueller Dateiname
    $aktuell ="../webcam/aktuelles-bild.jpg";
 
    // Verzeichnis
    $dir = "../webcam/";
 
    // Dateinamen, die nicht berücksichtig werden sollen, in diesem Fall nur eine
    $exclusions = array($aktuell);
 
    // Dateinamen und Zeitstempel einlesen
    $files = getFiles($dir, $exclusions);
 
    // Hier brauchen wir nur noch die Dateinamen, der Zeitstempel wurde nur
    // zur Sortierung verwenden
    $keys = array_keys($files);
 
    // Loeschen der aktuellen Datei, falls vorhanden
    if (file_exists($aktuell))
         unlink($aktuell);
 
    // Die letzte Datei aus dem Array holen
    $next = array_pop($keys);
 
    // Datei umbenennen
    rename ($next, $aktuell);
 
    // Die letzten 5 Dateien aus dem Array entfernen, da sie ja bleiben sollen
    $count = 5;
    if ($count < count($keys))
    {
       for ($i = 0; $i < $count; $i++)
           array_pop($keys);
    }
 
    // Alle anderen Dateien loeschen
    foreach ($keys as $key)
       unlink($key)
?>
 
Leider immer noch:

Warning: rename(,../webcam/aktuelles-bild.jpg): No such file or directory in /www/htdocs/w019xxx/meinehomepage/webcam.php on line 61
 
Werbung:
In den von Dir erfragten Variablen steht das, was Du in Deinem Script geschrieben hast:

// Aktueller Dateiname
$aktuell ="../webcam/aktuelles-bild.jpg";

// Die letzte Datei aus dem Array holen
$next = array_pop($keys);

Und wenn ich debuggen könnte, bräuchte ich wahrscheinlich nicht nachfragen...
 
Tja, wenn du es nicht schaffst, ein paar Variablen per echo ausgeben zu lassen, wie soll man dir helfen? Nur du kommst an deine Umgebung dran, nicht ich.
 
Ungetestet:
PHP:
<?php
 
    // Funktion zum lesen der Dateinamen und Zeitstempel
    function getFiles($dir, $exclusions)
    {
       $result = array();
      
       // Dateinamen einlesen   
       $files = glob($dir . "*.jpg");
 
       // Dateinamen und Zeitstempel
       foreach ($files as $file)
       {
         // Wenn die Datei nicht in den Ausschlüssen ist
         if (! in_array($file, $exclusions))
            $result[$file] = filemtime($file);
       }
    
       /* Das Array sieht an dieser Stelle jetzt so aus:       
       array( 'dateiname1' => 'zeitstempel1',
              'dateiname2' => 'zeitstempel2',
              'dateiname3' => 'zeitstempel3',
              etc...
             )
       */
      
       // jetzt das Array sortieren
       natsort($result);
 
       // Array zurueckliefern
       return $result;
    }
 
    // Aktueller Dateiname
    $aktuell ="../webcam/aktuelles-bild.jpg";
 
    // Verzeichnis
    $dir = "../webcam/";
 
    // Dateinamen, die nicht berücksichtig werden sollen, in diesem Fall nur eine
    $exclusions = array($aktuell);
 
    // Dateinamen und Zeitstempel einlesen
    $files = getFiles($dir, $exclusions);
    
    echo "Anzahl gefundener Dateien: " . count($files) . "<br>";
 
    // Hier brauchen wir nur noch die Dateinamen, der Zeitstempel wurde nur
    // zur Sortierung verwenden
    $keys = array_keys($files);
 
    // Loeschen der aktuellen Datei, falls vorhanden
    if (file_exists($aktuell))
    {
         echo "Lösche $aktuell<br>";
         unlink($aktuell);
    }
    else
      echo "Datei $aktuell nicht vorhanden<br>";
 
    // Die letzte Datei aus dem Array holen
    $next = array_pop($keys);
 
    // Datei umbenennen
    
    echo "Versuche Datei $next nach $aktuell zu verschieben<br>";
    
    if (@rename ($next, $aktuell))
      echo "Erfolgreich verschoben<br>";
    else
      echo "Nicht verschoben<br>";
 
    // Die letzten 5 Dateien aus dem Array entfernen, da sie ja bleiben sollen
    $count = 5;
    if ($count < count($keys))
    {
       for ($i = 0; $i < $count; $i++)
           array_pop($keys);
    }
 
    // Alle anderen Dateien loeschen
    foreach ($keys as $key)
       unlink($key)
?>
 
Werbung:
Habe das Script gegen Dein obiges ausgetauscht und aufgerufen. Ergebnis

Anzahl gefundener Dateien: 0
Datei ../webcam/aktuelles-bild.jpg nicht vorhanden
Versuche Datei nach ../webcam/aktuelles-bild.jpg zu verschieben
Nicht verschoben
 
Zurück
Oben