Script für das amzeigen des letzten Bildes gesucht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Script für das amzeigen des letzten Bildes gesucht

    Hallo php-Fachleute,

    ich bin auf der Suche nach einem Script was ein Verzeichis ausliest und mir das zuletzt hochgeladene Bild anzeigt.

    Es geht um eine Webcam die alle 10 Minuten Bilder in das Verzeichnis cam/images hochläd. Das Script soll im Ordner /cam liegen und mir jetzt (einfach ) das zuletzt hochgeladene (also das aktuelle) Webcambild aus dem Ordner /images anzeigen. Die Bilder heißen z.B. webcam15.12.31_14.31.26.11.jpg (webcamJahr.Monat.Tag_Stunde.Minute.Sekunde.Variable.jpg).
    Weil sich diese Variable leider ändert, müsste man das Änderungs- bzw. Erstelldatum einlesen, mit dem Dateinamen kann man dann bestimmt nichts anfangen(?).

    In der Suche habe ich nur dieses gefunden, aber das triffts ja nur zum Teil. Der Thread ist ja auch schon 13 Jahre alt...

    Ich würde mich über den php-Code freuen.


    Schonmal vielen Dank fürs Lesen und viele Grüße

    Frank
    Zuletzt geändert von fapl; 29.03.2015, 10:31.

  • #2
    Nach lager Suche habe ich ein script gefunden was das macht was es soll:

    PHP-Code:
    <?php 
    $folder 
    "images/"
    $dir opendir($folder); 
    $allowed = array('jpg'); 
    while (
    $file readdir($dir)) 

    if ((
    $file!= ".") && ($file!= "..")) 

    if (
    in_array(substr($file, -3), $allowed)) 

    $filemtime=filemtime("$folder/$file"); 
    $files[] = "$filemtime||$file"



    closedir($dir); 
    $fcount count($files); 
    if (
    $fcount!= 0

    rsort($files); 
    for(
    $i=0$i<1$i++) 

    $lastimage explode('||'$files[$i]); 
    $show_file $lastimage[1]; 
    $imagedata=@getimagesize("$folder/$lastimage"); 
    echo
    "<img src=\"$folder$show_file\">\n"


    ?>
    Ob das jetzt das Optimale ist weiss ich nicht, jedenfalls zeigt es das zuletzt hochgeladene Bild aus dem Ordner /images an.

    Vielleicht kann ja jemand etwas damit anfangen...

    MfG

    Frank

    Kommentar


    • #3
      Zitat von fapl Beitrag anzeigen
      Nach lager Suche habe ich ein script gefunden was das macht was es soll:... Ob das jetzt das Optimale ist weiss ich nicht, jedenfalls zeigt es das zuletzt hochgeladene Bild aus dem Ordner /images an.
      Da du eh das gesamte Verzeichnis durchläufst, kannst du dir das Sortieren nach dem filemtime-Wert sparen. Je mehr Bilder im Verzeichnis liegen, umso mehr Speicher und Zeit braucht deine Lösung. Und das Zusammenpappen von Dateiname und Timestamp mit anschließendem Trennen per explode() ist auch nicht wirklich sinnvoll. Man kann zwei Variablen vorhalten oder beide Sachen in einem Array oder Objekt speichern.

      Hier ein Vorschlag. Das ist das übliche Vorgehen beim Einlesen eines Verzeichnisses per opendir()+readdir()[0] abgewandelt für dein Suchkriterium:

      PHP-Code:
      function get_most_recent_file(
          
      $dirpath '/images'// directory path to scan
          
      $pcre '/\.jpg\z/' // file basenames to accept
      ) {
          
      $pwd getcwd();
          if (!
      chdir($dirpath)) {
              return 
      null;
          }
          if (!
      is_resource($dir opendir($dirpath))) {
              return 
      null;
          }

          for (
              
      $most_recent_mtime = -PHP_INT_MAX$most_recent_filename null;
              
      is_string($entry readdir());
          ) {
              if (
      is_dir($entry)) {
                  continue; 
      // includes '.' and '..'
              
      }
              
      // only files here

              
      if (!preg_match($pcre$entry)) {
                  continue;
              }
              
      // only filenames ending with ".jpg" here

              
      $filemtime filemtime($entry);
              if (
      $filemtime $most_recent_mtime) {
                  
      $most_recent_mtime $filemtime// file modification time
                  
      $most_recent_filename $entry// file basename
              
      }
          }

          
      closedir($dir);
          
      chdir($pwd);
          return 
      $most_recent_filename// null if no suitable file found

      Es kommt (im Erfolgsfall) der "Basename" zurück, also ein Dateiname ohne Verzeichnispfad davor. Da du das Ergebnis in HTML einbaust, könnte ich mir vorstellen, dass der Pfad im Dateisystem ein anderer ist als der den du auf deiner Website angibst. Den musst du halt noch vor den Dateinamen pappen, nachdem du dir sicher bist, dass das Verzeichnis nicht leer war (das soll manchmal vorkommen).

      --
      [0] Es gibt in PHP noch andere: DirectoryIteratoren, scandir(), glob() usw. ...
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        @fireweasel: Vielen dank für deine optimierte Version!

        Das dein Script schneller und schlanker ist, kommt der Sache sehr entgegen. In dem Ordner liegen bis zu 3000 Bilder...

        Leider bekomme ich das Script nicht ans laufen. Die html-Seite in der das Script inkludiert werden soll liegt im Verzeichnis /cam. Die Bilder liegen in dem Unterverzeichnis /cam/images.

        Es kommt (im Erfolgsfall) der "Basename" zurück, also ein Dateiname ohne Verzeichnispfad davor. Da du das Ergebnis in HTML einbaust, könnte ich mir vorstellen, dass der Pfad im Dateisystem ein anderer ist als der den du auf deiner Website angibst. Den musst du halt noch vor den Dateinamen pappen, nachdem du dir sicher bist, dass das Verzeichnis nicht leer war (das soll manchmal vorkommen).
        Was muss ich jetzt noch wo "vorpappen"?

        Danke nochmal und Gruß

        Frank

        Kommentar

        Lädt...
        X