Vollständige Version anzeigen : PHP Bildergallerie Unterordner einbeziehen


mySQL
05.01.2015, 16:39

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:


<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...

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Nanobyte
05.01.2015, 17:10

Du musst Recursive vorgehen: Listing all the folders subfolders and files in a directory using php (;stackoverflow~com/a/7121809/3647942)

$allebilder = listFolderFiles($ordner);

Es macht sinn die Dateien nach JPG zu filtern.


mySQL
06.01.2015, 13:55

Danke erstmal.

Klappt leider noch nicht. Habe das mal so zurechtgefummelt:


<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:


Warning: Division by zero in /users/;x/;/TVIP62000/bilder;php on line 6

Fatal error: Call to undefined function listFolderFiles() in /users/;x/;/TVIP62000/bilder;php on line 9


Kann da bitte mal jemand drübergucken?


Nanobyte
06.01.2015, 15:49

Bring erstmal Ordnung in deinen Code, seit wann rufen wir Funktionen auf bevor wir sie definiert haben?


mySQL
06.01.2015, 16:26

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

Habe die Funktion jetzt nach der Definition des Bilderordners gepackt.


<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:


01-01-2015
Warning: Division by zero in /users/;xx/;/TVIP62500/bilder;php on line 16
02-01-2015
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
03-01-2015
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
04-01-2015
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
05-01-2015
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
06-01-2015
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
10547829_686047881493737_4962992595259745799_o;jpg
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
29-12-2014
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
30-12-2014
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16
31-12-2014
Warning: Division by zero in /users/;xx/;/TVIP62000/bilder;php on line 16

Warning: Invalid argument supplied for foreach() in /users/;xx/;/TVIP62000/bilder;php on line 29


Nanobyte
06.01.2015, 17:17

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

Hiermit sollte es besser Funktionieren:
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

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 ;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=";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>


mySQL
06.01.2015, 18:07

Hallo Nanobyte!
Klasse - das funktioniert!

Ich lese gerade das

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.


Murdoc
08.01.2015, 20:42

Bring erstmal Ordnung in deinen Code, seit wann rufen wir Funktionen auf bevor wir sie definiert haben?
Seit immer? PHP erlaubt das ;)

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;


Article - How to create thumbnails with PHP and gd. (;;;icant;co~uk/articles/phpthumbnails/)


Ähnliche Themen zu PHP Bildergallerie Unterordner einbeziehen
  • Bildergallerie
    tach, ich bräuchte ne bildergalerie, allerdings für partyfotos, d;h. da is nix mit lightbox oder sowas weil die masse an bilder zu groß ist. ich hab mir da sowas in der art vorgestellt: PartyCam~de (;;;partycam~de/index;php?wp=fotos&id=9258) kennt einer von euch ein gutes system was [...]

  • wie kann ich z.b. ordner auf die windows sidebar einbeziehen?
    hallo zusammen, ich wollte gerne nen ordner mit verknüpfungen und ein paar andere verknüpfungen auf die sidebar ziehen aber die läßt ja nur diese komsichen miniaturanwendungen zu?! gibt es trotzdem einen weg wie ich das hinbekomme? gibt natürlich ne bw! MFG [...]

  • Sound in Programm einbeziehen
    Also... ich habe ien Programm, das ganz schön lauft...;) Jedoch muss ich ein Lied mit einbeziehen, dass beim Start des Programmes anfängt und erst aufhört, wenn es zuende ist, oder wenn das Programm geschlossen wird... Kann mir wohl einer sagen, wie ich es machen soll????( Da bin ich ehrlich ges [...]

  • [Thema] C# mit einbeziehen
    Schönen guten Morgen, ich bin relativ neu im forum und z;Z. auf einer Technikschule. Mein Prob. ist das der Lehrer bei dem wir C# lernen sollten, auf gut deutsch gesagt, scheiße ist und absolut keinen Plan von der materie, geschweige denn von PCs im allgemeinen, hat. Ich wollte vorschlagen das [...]



raid-rush.ws | Imprint & Contact pr