2016-08-13 13 views
0

Ich verwende dies, um das neueste Bild aus 2 Verzeichnissen anzuzeigen, wo Bilder von Kameras alle 10s hochladen Der Code funktioniert, aber wie ich weiß, könnte ich potenziell 10s von Tausenden von Bildern in jedem Verzeichnis I glaube, der Code ist nicht für die Situation optimiert. Auch ich lade die ganze Seite alle 10s, wo es vielleicht effizienter wäre, nur die Bilder zu aktualisieren. Könnte jemand mir helfen, Anweisungen zu geben, um dies zu optimieren? Vielen Dank.Das neueste Bild aus dem Verzeichnis anzeigen

<?php 
    $page = $_SERVER['PHP_SELF']; 
    $sec = "10"; 
    $base_url_east = 'East/snap/'; 
    $base_url_south = 'South/snap/'; 
    $newest_mtime_east = 0; 
    $show_file_east = 'BROKEN'; 
    if ($handle = opendir($base_url_east)) { 
     while (false !== ($file = readdir($handle))) { 
      if (($file != '.') && ($file != '..') && ($file != '.htaccess')) { 
       $mtime = filemtime("$base_url_east/$file"); 
       if ($mtime > $newest_mtime_east) { 
        $newest_mtime_east = $mtime; 
        $show_file_east = "$base_url_east/$file"; 
       } 
      } 
     } 
    } 
    $newest_mtime_south = 0; 
    $show_file_south = 'BROKEN'; 
    if ($handle = opendir($base_url_south)) { 
     while (false !== ($file = readdir($handle))) { 
      if (($file != '.') && ($file != '..') && ($file != '.htaccess')) { 
       $mtime = filemtime("$base_url_south/$file"); 
       if ($mtime > $newest_mtime_south) { 
        $newest_mtime_south = $mtime; 
        $show_file_south = "$base_url_south/$file"; 
       } 
      } 
     } 
    } 
?> 
<html> 
    <head> 
     <meta http-equiv="refresh" content="<?php echo $sec?>;URL='<?php echo $page?>'"> 
    </head> 
    <body bgcolor="#000000"> 
     <center> 
     <?php 
      print '<img src="' .$show_file_east. '" alt="Latest image uploaded" width="720" height="480">'; 
      print '<img src="' .$show_file_south. '" alt="Latest image uploaded" width="720" height="480">'; 
     ?> 
     </center> 
    </body> 
</html> 
+0

Wie die Verzeichnisse mit Dateien bevölkert werden? Ein Skript, das das macht? Oder einfach nur manuell? –

+1

Löschen Sie ' chris85

+0

Wenn Sie ein neues Bild hochladen, speichern Sie einfach den Dateinamen in einer Datenbank, um den Dateinamen abzurufen, anstatt alle Dateien durchzugehen und die neueste Datei zu erhalten. –

Antwort

0

Wenn die neuen Dateien werden East/named Snap/current.jpg und Süd/Snap/current.jpg, könnte man leicht den HTML-Code verwenden, auch ohne PHP wie diese

<img src="East/snap/current.jpg" alt="Latest image uploaded" width="720" height="480"> 
<img src="South/snap/current.jpg" alt="Latest image uploaded" width="720" height="480"> 

die ein/script lädt die Fotos sollten für

  • Kopieren der bereits hochgeladen Strom verantwortlich. jpg zu 2016-08-13-07: 00: 00.jpg (oder irgendein anderer Dateiname, der zB enthält. das Datum
  • die neue Datei

EDIT

Wenn Sie die Dateinamen zu current.jpg Kopieren nicht ändern können, wie ich oben sagte, versuchen

$string = date('Ymd-H'); // 20160812-12 
$files = glob('Schedule_' . $string . '*.jpg'); 

Diese erhalten Sie alle Dateien in ein Array, die in der aktuellen Stunde aufgenommen wurden. Es könnte sein, dass Sie ein Problem bekommen, wenn das Skript 9 Sekunden nach der Änderung der Stunde aufgerufen wird, weil es kein Bild von dieser Stunde findet. Auf diese Weise können Sie die Anzahl der gescannten Dateien minimieren.

EDIT

Dieses Skript nicht getestet, sollte aber eine letzte Datei für einen Ordner zurück:

<?php 

$basePath = '/home/user/camera/East/snap'; 

// Scans files from the current and the last minutes 
// this ensures that always files will be found, even if the minute changed 
$date = new \DateTime(); 
$date->setTimeZone(new \DateTimeZone('America/Vancouver')); 

$prefixCurrentMinute = $basePath . '/Schedule_' . $date->format('Ymd-Hi') . '*.jpg'; 
$date->sub(new \DateInterval('PT1M')); 
$prefixLastMinute = $basePath . '/Schedule_' . $date->format('Ymd-Hi') . '*.jpg'; 

$files = array_merge(
    glob($prefixLastMinute), 
    glob($prefixCurrentMinute) 
); 

$lastFile = 'dummy.jpg'; 

if (is_array($files) AND count($files) > 0) { 
    // this methods sorts the files "regularly" by default, and I guess 
    // regularly means alpha-numeric in ascending order ... 
    sort($files); 

    $lastFile = $files[0]; 
    // use this, if the order is not ascending after using sort() on the array 
    // $lastFile = $files[count($files) - 1]; 
} 

$eastPhoto = basename($lastFile); 
?> 

<img src="East/snap/<?php echo $eastPhoto; ?>" alt="Latest image uploaded" width="720" height="480"> 
+0

Hallo danke für die Hilfe. – Greg

+0

Die Kameras laden per FTP in die Verzeichnisse hoch. Ich habe keine Möglichkeit, die Dateinamen beim Hochladen durch die Kameras zu ändern. Dateinamen haben das Format: Schedule_20160812-123433.jpg – Greg

+0

Ich werde meine Antwort bearbeiten. –

Verwandte Themen