PHP Bildergallerie Unterordner einbeziehen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von mySQL, 5. Januar 2015 .

  1. 5. Januar 2015
    Hallo RRler,

    sicherlich hat der eine oder andere von euch schonmal mit IP-Kameras gearbeitet.
    Netterweise bieten die meisten ja eine Bewegungserkennung mit anschließendem FTP Upload an.

    Dummerweise sortieren ABUS Kameras die Fotos in zig Unterordnern weg...

    z.B.: /KAMERANAME/Bewegungserkennung/2015-01-03/12-22-59/pre-trigger/20150103122259.jpeg

    Praktisch wäre da eine Simple PHP Gallerie, die alle unterverzeichnisse durchsucht und die Bilder
    auf einer Seite darstellt.

    Kennt da jemand was fertiges?

    Habe z.B. diese Gallerie gefunden:

    PHP:
    <ul id="galerie">
    <?php
    // Ordnername 
    $ordner  "images" //auch komplette Pfade möglich ($ordner = "download/files";)
     
    // Ordner auslesen und Array in Variable speichern
    $allebilder  scandir ( $ordner );  // Sortierung A-Z
    // Sortierung Z-A mit scandir($ordner, 1)                               
     
    // Schleife um Array "$alledateien" aus scandir Funktion auszugeben
    // Einzeldateien werden dabei in der Variabel $datei abgelegt
    foreach ( $allebilder  as  $bild ) {
     
        
    // Zusammentragen der Dateiinfo
        
    $bildinfo  pathinfo ( $ordner . "/" . $bild ); 
        
    //Folgende Variablen stehen nach pathinfo zur Verfügung
        // $dateiinfo['filename'] =Dateiname ohne Dateiendung  *erst mit PHP 5.2
        // $dateiinfo['dirname'] = Verzeichnisname
        // $dateiinfo['extension'] = Dateityp -/endung
        // $dateiinfo['basename'] = voller Dateiname mit Dateiendung
     
        // Größe ermitteln für Ausgabe
        
    $size  ceil ( filesize ( $ordner . "/" . $bild )/ 1024 ); 
        
    //1024 = kb | 1048576 = MB | 1073741824 = GB
     
        // scandir liest alle Dateien im Ordner aus, zusätzlich noch "." , ".." als Ordner
        // Nur echte Dateien anzeigen lassen und keine "Punkt" Ordner
        // _notes ist eine Ergänzung für Dreamweaver Nutzer, denn DW legt zur besseren Synchronisation diese Datei in den Orndern ab
        // Thumbs.db ist eine Ergänzung unsichtbare Dateiergänzung die von ACDSee kommt
        // um weitere ungewollte Dateien von der Anzeige auszuschließen kann man die if Funktion einfach entsprechend erweitern
        
    if ( $bild  !=  "."  &&  $bild  !=  ".."   &&  $bild  !=  "_notes"  &&  $bildinfo [ 'basename' ] !=  "Thumbs.db" ) { 
        
    ?>
        <li>
            <a href="<?php  echo  $bildinfo [ 'dirname' ]. "/" . $bildinfo [ 'basename' ]; ?>">
            <img src="<?php  echo  $bildinfo [ 'dirname' ]. "/" . $bildinfo [ 'basename' ]; ?>" width="140" alt="Vorschau" /></a> 
            <span><?php  echo  $bildinfo [ 'filename' ];  ?> (<?php  echo  $size  ?>kb)</span>
        </li>
    <?php
        
    };
     };
    ?>
    </ul>
    Bezieht aber keine Unterordner ein...
     
  2. 5. Januar 2015
    AW: PHP Bildergallerie Unterordner einbeziehen

    Du musst Recursive vorgehen: Listing all the folders subfolders and files in a directory using php

    PHP:
    $allebilder  listFolderFiles ( $ordner );
    Es macht sinn die Dateien nach JPG zu filtern.
     
  3. 6. Januar 2015
    AW: PHP Bildergallerie Unterordner einbeziehen

    Danke erstmal.

    Klappt leider noch nicht. Habe das mal so zurechtgefummelt:

    PHP:
    <ul id="galerie">

    <?php

    // Ordnername 
    $ordner  / Bewegungserkennung“ //auch komplette Pfade möglich ($ordner = "download/files";)
     
    // Ordner auslesen und Array in Variable speichern
    $allebilder  listFolderFiles ( $ordner );   // Sortierung A-Z
    // Sortierung Z-A mit scandir($ordner, 1)                               
     
    // Schleife um Array "$alledateien" aus scandir Funktion auszugeben
    // Einzeldateien werden dabei in der Variabel $datei abgelegt
    foreach ( $allebilder  as  $bild ) {
     
        
    // Zusammentragen der Dateiinfo
        
    $bildinfo  pathinfo ( $ordner . "/" . $bild ); 
        
    //Folgende Variablen stehen nach pathinfo zur Verfügung
        // $dateiinfo['filename'] =Dateiname ohne Dateiendung  *erst mit PHP 5.2
        // $dateiinfo['dirname'] = Verzeichnisname
        // $dateiinfo['extension'] = Dateityp -/endung
        // $dateiinfo['basename'] = voller Dateiname mit Dateiendung
     
        // Größe ermitteln für Ausgabe
        
    $size  ceil ( filesize ( $ordner . "/" . $bild )/ 1024 ); 
        
    //1024 = kb | 1048576 = MB | 1073741824 = GB
     
        // scandir liest alle Dateien im Ordner aus, zusätzlich noch "." , ".." als Ordner
        // Nur echte Dateien anzeigen lassen und keine "Punkt" Ordner
        // _notes ist eine Ergänzung für Dreamweaver Nutzer, denn DW legt zur besseren Synchronisation diese Datei in den Orndern ab
        // Thumbs.db ist eine Ergänzung unsichtbare Dateiergänzung die von ACDSee kommt
        // um weitere ungewollte Dateien von der Anzeige auszuschließen kann man die if Funktion einfach entsprechend erweitern
        
    if ( $bild  !=  "."  &&  $bild  !=  ".."   &&  $bild  !=  "_notes"  &&  $bildinfo [ 'basename' ] !=  "Thumbs.db" ) {  ?>


    <?php
    function  listFolderFiles ( $ordner ){
        
    $ffs  scandir ( $ordner );
        echo 
    '<ol>' ;
        foreach(
    $ffs  as  $ff ){
            if(
    $ff  !=  '.'  &&  $ff  !=  '..' ){
                echo 
    '<li>' . $ff ;
                if(
    is_dir ( $ordner . / . $ff ))  listFolderFiles ( $ordner . / . $ff );
                echo 
    '</li>' ;
            }
        }
        echo 
    '</ol>' ;
    }
    ?>


        <li>
            <a href="<?php  echo  $bildinfo [ 'dirname' ]. "/" . $bildinfo [ 'basename' ]; ?>">
            <img src="<?php  echo  $bildinfo [ 'dirname' ]. "/" . $bildinfo [ 'basename' ]; ?>" width="140" alt="Vorschau" /></a> 
            <span><?php  echo  $bildinfo [ 'filename' ];  ?> (<?php  echo  $size  ?>kb)</span>
        </li>


    <?php
        
    };
     };
    ?>
    </ul>

    Anscheinend mag er die Funktion nicht aufrufen. Als Fehlermeldung bekomme ich:

    Code:
    Warning: Division by zero in /users/xxxx/www/TVIP62000/bilder.php on line 6
    
    Fatal error: Call to undefined function listFolderFiles() in /users/xxxx/www/TVIP62000/bilder.php on line 9
    
    Kann da bitte mal jemand drübergucken?
     
  4. 6. Januar 2015
    AW: PHP Bildergallerie Unterordner einbeziehen

    Bring erstmal Ordnung in deinen Code, seit wann rufen wir Funktionen auf bevor wir sie definiert haben?
     
  5. 6. Januar 2015
    AW: PHP Bildergallerie Unterordner einbeziehen

    Du musst entschuldigen, habe schon ewigkeiten nicht mehr
    mit PHP rumgebastelt.

    Habe die Funktion jetzt nach der Definition des Bilderordners gepackt.

    PHP:
    <ul id="galerie">
    <?php
    // Ordnername 
    $ordner  "Bewegungserkennung" //auch komplette Pfade möglich ($ordner = "download/files";)
     
    // Ordner auslesen und Array in Variable speichern
    $allebilder  listFolderFiles ( $ordner );  // Sortierung A-Z


    function  listFolderFiles ( $ordner ){ 
        
    $ffs  scandir ( $ordner ); 
        echo 
    '<ol>'
        foreach(
    $ffs  as  $ff ){ 
            if(
    $ff  !=  '.'  &&  $ff  !=  '..' ){ 
                echo 
    '<li>' . $ff
                if(
    is_dir ( $ordner . / . $ff ))  listFolderFiles ( $ordner . / . $ff ); 
                echo 
    '</li>'
            } 
        } 
        echo 
    '</ol>'
    }



    // Sortierung Z-A mit scandir($ordner, 1)                               
     
    // Schleife um Array "$alledateien" aus scandir Funktion auszugeben
    // Einzeldateien werden dabei in der Variabel $datei abgelegt
    foreach ( $allebilder  as  $bild ) {
     
        
    // Zusammentragen der Dateiinfo
        
    $bildinfo  pathinfo ( $ordner . "/" . $bild ); 
        
    //Folgende Variablen stehen nach pathinfo zur Verfügung
        // $dateiinfo['filename'] =Dateiname ohne Dateiendung  *erst mit PHP 5.2
        // $dateiinfo['dirname'] = Verzeichnisname
        // $dateiinfo['extension'] = Dateityp -/endung
        // $dateiinfo['basename'] = voller Dateiname mit Dateiendung
     
        // Größe ermitteln für Ausgabe
        
    $size  ceil ( filesize ( $ordner . "/" . $bild )/ 1024 ); 
        
    //1024 = kb | 1048576 = MB | 1073741824 = GB
     
        // scandir liest alle Dateien im Ordner aus, zusätzlich noch "." , ".." als Ordner
        // Nur echte Dateien anzeigen lassen und keine "Punkt" Ordner
        // _notes ist eine Ergänzung für Dreamweaver Nutzer, denn DW legt zur besseren Synchronisation diese Datei in den Orndern ab
        // Thumbs.db ist eine Ergänzung unsichtbare Dateiergänzung die von ACDSee kommt
        // um weitere ungewollte Dateien von der Anzeige auszuschließen kann man die if Funktion einfach entsprechend erweitern
        
    if ( $bild  !=  "."  &&  $bild  !=  ".."   &&  $bild  !=  "_notes"  &&  $bildinfo [ 'basename' ] !=  "Thumbs.db" ) { 
        
    ?>
        <li>
            <a href="<?php  echo  $bildinfo [ 'dirname' ]. "/" . $bildinfo [ 'basename' ]; ?>">
            <img src="<?php  echo  $bildinfo [ 'dirname' ]. "/" . $bildinfo [ 'basename' ]; ?>" width="140" alt="Vorschau" /></a> 
            <span><?php  echo  $bildinfo [ 'filename' ];  ?> (<?php  echo  $size  ?>kb)</span>
        </li>
    <?php
        
    };
     };
    ?>
    </ul>

    Wird leider nicht besser:
    Code:
    
    01-01-2015 
    Warning: Division by zero in /users/xxxxx/www/TVIP62500/bilder.php on line 16
    02-01-2015 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    03-01-2015 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    04-01-2015 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    05-01-2015 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    06-01-2015 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    10547829_686047881493737_4962992595259745799_o.jpg 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    29-12-2014 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    30-12-2014 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    31-12-2014 
    Warning: Division by zero in /users/xxxxx/www/TVIP62000/bilder.php on line 16
    
    Warning: Invalid argument supplied for foreach() in /users/xxxxx/www/TVIP62000/bilder.php on line 29
    
     
  6. 6. Januar 2015
    Zuletzt bearbeitet: 6. Januar 2015
    AW: PHP Bildergallerie Unterordner einbeziehen

    Hab völlig übersehen das die Funktion aus dem Link gar nichts zurück gibt.

    Hiermit sollte es besser Funktionieren:
    PHP:
    function  deepFolderFiles ( $dir ) {
      
    $ffs  scandir ( $dir );
      
    $list  = array();
      foreach(
    $ffs  as  $ff ) {
        if(
    $ff  !=  '.'  &&  $ff  !=  '..' ){
          if (
    is_dir ( $dir  '/'  $ff )) {
            
    $list  array_merge ( $list deepFolderFiles ( $dir  '/'  $ff ));
          }
          else {
            
    $list [] =  $dir  '/'  $ff ;
          }
        }
      }
      return 
    $list ;
    }
    --------------------------------

    Hier eine komplett-Lösung:

    PHP:
    <? php

    function  rsearch ( $folder $pattern ) {
        
    $dir  = new  RecursiveDirectoryIterator ( $folder );
        
    $ite  = new  RecursiveIteratorIterator ( $dir );
        
    $files  = new  RegexIterator ( $ite $pattern RegexIterator :: GET_MATCH );
        
    $fileList  = array();
        foreach(
    $files  as  $file ) {
            
    $fileList  array_merge ( $fileList $file );
        }
        return 
    $fileList ;
    }

    // @source  http://jeffreysambells.com/2012/10/25/human-readable-filesize-php
    function  human_filesize ( $bytes $decimals  2 ) {
      
    $size  = array( 'B' , 'kB' , 'MB' , 'GB' , 'TB' , 'PB' , 'EB' , 'ZB' , 'YB' );
      
    $factor  floor (( strlen ( $bytes ) -  1 ) /  3 );
      return 
    sprintf ( "%. { $decimals } f" $bytes  pow ( 1024 $factor )) . @ $size [ $factor ];
    }


    $folder  'Bewegungserkennung' ;
    $files  rsearch ( $folder '/^.*\.(?:jpg|jpeg|png|gif)$/i' );

    ?><!doctype html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Galerie</title>
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.2/normalize.min.css">
      <style>
      *,
      *:before,
      *:after {
        box-sizing: border-box;
      }

      .galerie {
        display: block;
        max-width: 900px;
        margin: 100px auto 0;
      }
        .galerie-item {
          display: inline-block;
          width: 140px;
        }
        .galerie-item__filesize {
          display: block;
          font-size: 0.7em;
        }
      </style>
    </head>
    <body>

      <div class="galerie">
    <?php
    if ( count ( $files ) >  0 ) :
      foreach (
    $files  as  $file ) : 
    ?>
        <div class="galerie-item">
          <a href="<?php  echo  $file ?>">
            <!-- 
              Warning! Even with width=140 the full image is loading! 
              Use thumbnail files here and link to original.
            -->
            <img class="galerie-item__thumbnail" src="<?php  echo  $file ?>" alt="Movement captured" width="140">
          </a>
          <span class="galerie-item__info"><?php  echo  basename ( $file );  ?> <span class="galerie-item__filesize">(<?php  echo  human_filesize ( filesize ( $file ));  ?>)</span></span>
        </div>
    <?php
      
    endforeach;
    else:
    ?>
      <h2>Nothing found.</h2>
    <?php
    endif;
    ?>
      </div>

    </body>
    </html>
     
  7. 6. Januar 2015
    AW: PHP Bildergallerie Unterordner einbeziehen

    Hallo Nanobyte!
    Klasse - das funktioniert!

    Ich lese gerade das
    Code:
    Warning! Even with width=140 the full image is loading! 
    Use thumbnail files here and link to original.
    
    Gibt es da eine simple möglichkeit, um Thumbnails zu generieren?

    Die Originalfotos haben zwar nur 0,2-0,3mb aber im laufe des Monats werden das schnell ein paar hundert.
     
  8. 8. Januar 2015
    AW: PHP Bildergallerie Unterordner einbeziehen

    Seit immer? PHP erlaubt das

    Article - How to create thumbnails with PHP and gd.
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.