Verweise zu Bildern in anderen verzeichnissen

Bloods

Grünschnabel
Verzeichnisse

aaalso. ich habe ein foto album gecodet, dass momentan so wunderbar funktioniert. :

Code:
  <?php
  
  $dir = "html/album/Arwym";
  
   function file_count($dir) {
  $count = 0;
  
  if (substr($dir, -1) != DIRECTORY_SEPARATOR) $dir .= DIRECTORY_SEPARATOR;
  
  if ($dirhwnd = opendir($dir)) {
  while(($file = readdir($dirhwnd)) !== false) {
  $path = $dir . $file;
  
  if (is_file($path)) ++$count;
  }
  }
  
  return $count;
  }   
  
  
  $fd = opendir($dir);
  
  $files = Array();
  while($foto = readdir($fd))
  {
  if  (preg_match("/\.(jpg|gif|png)$/i", $foto))
  
  	{
  		$files[] = $foto;
  	}
  }
  
  $random_foto = $files[rand(0,count($files)-1)];
  echo "<center>Arwym<br><a href=\"$dir/arwym.php?\"><p>";
  echo "<img src=\"$dir/$random_foto\" align=middle border=0 height=100>";
  echo "</a><br>Number of Fotos: \n"; 
  echo(file_count($dir));
  
   
  
  closedir($fd);
  ?>

Allerdings funktioniert dies nur für den ordner arwym.
Ich würde es gerne so abändern, dass es automatisch für alle ordner funktioniert die sich in dem verzeichnis album befinden. Ich weiss aber nicht so recht wie ich das hinkriegen soll. Kann mir jemand helfen?
 
Zuletzt bearbeitet:
Gutn Morgen...

also mal so ganz grob

  • Einlesen aller Dateien des Verzeichnis "album" in ein Array
  • In einer Schleife Prüfung ob Array-Eintrag ein Verzeichnis ist
  • Falls es ein Verzeichnis ist, Deine Albumroutine ausführen
  • usw...

alle Funktionen die Du benötigst findest Du hier
php.net

VG Clemens
 
danke, aber kann mir nicht jemand genauer helfen? ich bin wirklich noch ziemlich neu im PHP programmieren und hab noch keinerlei routine.
So schaffe ich das noch nicht irgendwie...
 
Servus nochmal!

Also Du hast es doch schon mal geschafft Dir eine subba Funktion zu basteln!

Diese muss jetzt so oft aufgerufen werden, wie Du Verzeichnisse in "Album" hast und es muss jedesmal das nächste Verzeichnis in $dir eingesetzt werden. Ok?
Drum wird z.B. Dein jetziger Code wird zu einer Funktion, am besten im Header der Datei...
Code:
function wasweisich ($subdir) // bekommt ein Verzeichnis übergeben {
   $dir = "html/album/".$subdir;  // zusammensetzen des kompletten Verzeichnisses
...hier steht Dein jetziger Code... 
}
So nun folgt das Einlesen des Verzeichnisses Album.
(Das machst Du ja schon mit den Bilddateien... opendir...readdir...closedir...)
Nun bekommt man ein Array mit Dateien und Verzeichnissen.

Als nächstes wird in einer Schleife das Array durchlaufen und abgefragt, ob es sich um ein Verzeichnis handelt
Beschreibung isdir()
...wenn es ein Verzeichnis ist, rufst Du die Funktion auf und übergibst ihr das gefundene Verzeichnis
Code:
if(is_dir($meinarrray[$i])) {       // falls es ein Array ist: TRUE
  wasweisich($meinarray[$i]);  // übergeben des Verzeichnisnamens
}
Ich hoffe das war jetzt ein bisschen verständlicher...
vg Clemens
 
vielen dank das hat mir echt sehr viel weitergeholfen.
Aber irgendwas mache ich noch falsch...*doof*
fehlermedlung: Warning: readdir(): 2 is not a valid Directory resource in /home/virtual/site6/fst/var/www/html/forum/html/album/album.php on line 60
Mein Quelltext sieht im Moment so aus:

Code:
<html>
 <head>
 <title>my title</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link href="album.css" rel="stylesheet" type="text/css">
 
 <?php
 
 function wasweisich ($subdir)  {
    $dir = ".".$subdir;
 
  function file_count($dir) {
 $count = 0;
 
 if (substr($dir, -1) != DIRECTORY_SEPARATOR) $dir .= DIRECTORY_SEPARATOR;
 
 if ($dirhwnd = opendir($dir)) {
 while(($file = readdir($dirhwnd)) !== false) {
 $path = $dir . $file;
 
 if (is_file($path)) ++$count;
 }
 }
 
 return $count;
 }   
 
 
 $fd = opendir($dir);
 
 $files = Array();
 while($foto = readdir($fd))
 {
 if  (preg_match("/\.(jpg|gif|png)$/i", $foto))
 
 	{
 		$files[] = $foto;
 	}
 }
 
 $random_foto = $files[rand(0,count($files)-1)];
 echo "<center>$subdir<br><a href=\"$dir/$subdir.php?\"><p>";
 echo "<img src=\"$dir/$random_foto\" align=middle border=0 height=100>";
 echo "</a><br>Number of Fotos: \n"; 
 echo(file_count($dir)-1);
 
  
 
 closedir($fd);
 }
 ?>
 
 </head>
 <body>
 
 
 <?php
 $fd2 = opendir(".");
 $ordner = Array();
 while ($verzeichnis = readdir($fd2))
 {
 
 if(is_dir($ordner[$i] )) { 
 	   wasweisich($ordner[$i]);  
 }
 
 closedir($fd2);
 }
 
 ?>
 
 </body>
 </html>
 
Zuletzt bearbeitet:
Ja hallo nochmal! Ich mache mal ein paar Anmerkungen in deinen Quelltext. Unten habe ich dann denn verbesserten angehängt...
Code:
<html>
 <head>
 <title>my title</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link href="album.css" rel="stylesheet" type="text/css">
 
 <?php

 function wasweisich ($subdir)  {  Funktionen werden nicht geschachtelt

    $dir = ".".$subdir;  wenn dann "./".$subdir
 
  function file_count($dir) {
 $count = 0;
 
 if (substr($dir, -1) != DIRECTORY_SEPARATOR) $dir .= DIRECTORY_SEPARATOR;
 
 if ($dirhwnd = opendir($dir)) {
 while(($file = readdir($dirhwnd)) !== false) {
 $path = $dir . $file;
 
 if (is_file($path)) ++$count;
 }
 }
 
 return $count;
 }   
  
 $fd = opendir($dir);
 
 $files = Array();

 while($foto = readdir($fd))  Abbruchkriterium fehlt !== FALSE
 {
 if  (preg_match("/\.(jpg|gif|png)$/i", $foto))
 
 	{
 		$files[] = $foto;
 	}
 }
 
 $random_foto = $files[rand(0,count($files)-1)];
 Hier musst Du dir jetzt natürlich überlegen wie Du weiter machen willst
 echo "<center>$subdir<br><a href=\"$dir/$subdir.php?\"><p>";
 beim mischen von html und php Code trotzdem auf die korrekte Schreibweise achten  
echo "<img src=\"".$dir."/".$random_foto."\" align=\"middle\" border=\"0\" height=\"100\">";
 echo "<img src=\"$dir/$random_foto\" align=middle border=0 height=100>";
 echo "</a><br>Number of Fotos: \n"; 
 Wieso -1? Dann fehlt Dir ja eins
 echo(file_count($dir)-1);
    
 closedir($fd);
 }
 ?>
 
 </head>
 <body>
 
 
 <?php
 $fd2 = opendir(".")
;

 $ordner = Array();  Wozu?

 while ($verzeichnis = readdir($fd2))  !== FALSE s.o.
 {
 
 Hier muss die Variable $verzeichnis geprüft werden, "." und ".." müssen ausgeschlossen werden
 if(is_dir($ordner[$i] )) { 
 	   wasweisich($ordner[$i]);  
 }
 
 closedir($fd2);
 }
 
 ?>
 
 </body>
 </html>

Code:
 function file_count($dir) {
   $count = 0;
 
   if (substr($dir, -1) != DIRECTORY_SEPARATOR) $dir .= DIRECTORY_SEPARATOR;
 
   if ($dirhwnd = opendir($dir)) {
     while(($file = readdir($dirhwnd)) !== false) {
       $path = $dir . $file;
       if (is_file($path)) ++$count;
     }
   }
  return $count;
 }   
 
 function wasweisich ($subdir)  {
  $dir = "./".$subdir;
 
 $fd = opendir($dir);
 
 $files = Array();

  if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
     while (($file = readdir($dh)) !== false) {
       if  (preg_match("/\.(jpg|gif|png)$/i", $file))	{ 
     	   $files[] = $file;
       }
     }
     closedir($dh);
   }
 }

 
 $random_foto = $files[rand(0,count($files)-1)];
 echo "<center>$subdir<br><a href=\"".$dir."\"php?\"><p>";
 echo "<img src=\"".$dir."/".$random_foto."\" align=\"middle\" border=\"0\" height=\"100\">";
 echo "</a><br>Number of Fotos: \n"; 
 echo(file_count($dir));
 closedir($fd);
 }
 ?>
 
 </head>
 <body>
 
 <?php
 
 $dir = ".";
 if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
     while (($file = readdir($dh)) !== false) {
       if(is_dir($file) && $file != "." && $file != "..") { 
     	   wasweisich($file);  
       }
     }
     closedir($dh);
   }
}
?>
 </body>
 </html>

...ein paar kleine Änderungen und dann funktioniert das schon!

Du musst Dir jetzt dann noch überlegen, was Du mit Dem Link machst. Entweder eine neue Seite für jedes Album, oder Du baust noch eine Funktion in die Seite ein, welche das angewählt Album anzeigt!
Beides Möglichkeiten kannst Du aus den schon verwendeten Codezeilen erstellen.
Viel Spaß beim tüffteln.
vg Clemens
 
Danke Danke Danke!
Es läuft und sieht auch noch toll aus! (hab noch grafische änderungen vorgenommen)
Ich habe jetzt erstmal in jedesverzeichnis eine php datei gelegt, wenn ich zeit habe versuche ich es mal ohne hinzubekommen.
Aber wirklich, du hast mir soooo viel geholfen, ich weiss das wriklich zu schätzen!
 
Zurück