2017-09-07 4 views
3

Ich habe ein Verzeichnis mit Unterordnern mit Bildern. Ich brauche das alles auf einer Seite angezeigt werden, und deren Ordnernamen auch, so etwas wie dieses:PHP echo alle Unterordner Bilder

  • echo Subfolder name
    echo image, image, image
  • echo Subfolder2 name
    echo image2, image2 , image2
  • etc

Ich habe versucht mit

$images = glob($directory . "*.jpg"); 

aber das Problem ist, muss ich genau den Unterordner Namen in $directory definieren, wie "Pfad/Ordner/Unterordner /";

Gibt es eine Option wie einige "Wildcard", die alle Unterordner und echo foreach Unterordner Namen und seinen Inhalt überprüfen würde?

Auch opendir und scandir können hier aufgrund von Servereinschränkungen, die ich nicht kontrollieren kann, nicht angewendet werden.

+0

PHP Glob nicht ** Platzhalter unterstützt. Sie müssen eine rekursive Funktion schreiben, die das tut. – Jarzon

Antwort

1

Glob normalerweise eine rekursive Wildcard, geschrieben wie/** /, aber PHP Glob Funktion unterstützt es nicht. Der einzige Weg ist also, eine eigene Funktion zu schreiben. Hier ist ein einfaches, die rekursive Wildcard-Unterstützung:

<?php 
function recursiveGlob($pattern) 
{ 
    $subPatterns = explode('/**/', $pattern); 

    // Get sub dirs 
    $dirs = glob(array_shift($subPatterns) . '/*', GLOB_ONLYDIR); 

    // Get files in the current dir 
    $files = glob($pattern); 

    foreach ($dirs as $dir) { 
     $subDirList = recursiveGlob($dir . '/**/' . implode('/**/', $subPatterns)); 

     $files = array_merge($files, $subDirList); 
    } 

    return $files; 
} 

Verwenden Sie es wie die $files = recursiveGlob("mainDir/**/*.jpg");