PHP Suche nach Filetyp und diese ausgeben lassen

hemorieder

Lieutenant
Registriert
März 2003
Beiträge
649
Hi,

ich bastel an einen Skript, dass in einem Ordner nach allen Dateien sucht in einem bestimmten Format.
Dazu habe ich das gebastelt

Code:
function getPreviews($category)
    {
        $directories = glob("$category/*.abc");
        $directory = array();
        foreach($directories as $directories)
        {
            $directory[] = str_replace("$category/", "", $directories);  
        }
        return $directory;    
   
    }

Nun will ich mir im zweiten Schritt jede Datei ausgeben lassen

Code:
$abc = getPreviews(import); // import heißt das Folder in dem gesucht werden soll
    foreach($png as $data)
        {
            echo $data;
        }

Aber irgendwie bekomme ich keine Ausgabe.
Die Dateien liegen im Verzeichnis import dort aber wiederrum in X tieferen Ordnern, also zb /import/x/y/ oder /import/x/y/z/a/b usw


Was mache ich falsch?
 
Du kannst nicht über $directories mit $directories iterieren.
 
Code:
foreach($directories as $f)
        {
            $directory[] = str_replace("$category/", "", $f);   
        }

hilft auch nicht
 
Dann musst du bei dir debuggen.

Code:
❯ ll e6NULvRBDX && cat foo.php && php foo.php e6NULvRBDX
total 0
drwxrwxrwx 1 root root 512 Apr 27 11:04 ./
drwxrwxrwt 1 root root 512 Apr 27 11:05 ../
-rw-r--r-- 1 root root   0 Apr 27 11:04 iuohfawef
-rw-r--r-- 1 root root   0 Apr 27 11:00 uashnd
<?php

function getPreviews($category)
{
    $directories = glob("$category/*");
    $directory = array();
    foreach($directories as $f)
    {
        $directory[] = str_replace("$category/", "", $f);
    }
    return $directory;
}

var_dump( getPreviews( $argv[1] ) );

/tmp/foo.php:14:
array(2) {
  [0] =>
  string(9) "iuohfawef"
  [1] =>
  string(6) "uashnd"
}
 
Kann es sein das meine Ausgabe des Inhalts irgendwie nicht geht?
 
Er wird entsprechend einfach keine Dateien finden und dann nichts ausgeben können. Hangel dich mit var_dump() durch wenn du keinen Debugger hast und schau nach wo es hakt.
 
Er spuckt nur die erste Datei im obersten Verzeichnis aus, die anderen in tieferen Verzeichnissen werden ignoriert.
 
ok perfekt, ich habe nun folgendes, das klappt auch
PHP:
function findFiles($directory, $extensions = array()) {
    function glob_recursive($directory, &$directories = array()) {
        foreach(glob($directory, GLOB_ONLYDIR | GLOB_NOSORT) as $folder) {
            $directories[] = $folder;
            glob_recursive("{$folder}/*", $directories);
        }
    }
    glob_recursive($directory, $directories);
    $files = array ();
    foreach($directories as $directory) {
        foreach($extensions as $extension) {
            foreach(glob("{$directory}/*.{$extension}") as $file) {
                $files[$extension][] = $file;
            }
        }
    }
    return $files;
}

wenn ich nun

PHP:
var_dump(findFiles("import", array ("png")));

bekomme ich nun logischerweise folgende Ausgabe:

PHP:
array(1) { ["png"]=> array(13) { [0]=> string(48) "import/Bildschirmfoto 2020-04-19 um 16.53.55.png" [1]=> string(53) "import/test/Bildschirmfoto 2020-04-19 um 16.53.55.png" [2]=> string(59) "import/test/kdlsd/Bildschirmfoto 2020-04-19 um 16.53.55.png" [3]=> string(71) "import/test/kdlsd/mlmsdlkslds/Bildschirmfoto 2020-04-19 um 16.53.55.png" [4]=> string(61) "import/folders/test/Bildschirmfoto 2020-04-19 um 16.53.55.png" [5]=> string(67) "import/folders/test/kdlsd/Bildschirmfoto 2020-04-19 um 16.53.55.png" [6]=> string(79) "import/folders/test/kdlsd/mlmsdlkslds/Bildschirmfoto 2020-04-19 um 16.53.55.png" [7]=> string(67) "import/folders/test Kopie/Bildschirmfoto 2020-04-19 um 16.53.55.png" [8]=> string(73) "import/folders/test Kopie/kdlsd/Bildschirmfoto 2020-04-19 um 16.53.55.png" [9]=> string(85) "import/folders/test Kopie/kdlsd/mlmsdlkslds/Bildschirmfoto 2020-04-19 um 16.53.55.png" [10]=> string(59) "import/test Kopie/Bildschirmfoto 2020-04-19 um 16.53.55.png" [11]=> string(65) "import/test Kopie/kdlsd/Bildschirmfoto 2020-04-19 um 16.53.55.png" [12]=> string(77) "import/test Kopie/kdlsd/mlmsdlkslds/Bildschirmfoto 2020-04-19 um 16.53.55.png" } }

Wie kann ich nun nach und nach etwas mit dem Ergebnis anfangen?
Also in pseudocode

Code:
while arrayMitBildern {

echo $aktuellesBild; //akutelles Bild enthällt zb "import/test Kopie/kdlsd/mlmsdlkslds/Bildschirmfoto 2020-04-19 um 16.53.55.png"

}
 
So in der Art:
PHP:
$alleDateien = findFiles(...);

foreach ($alleDateien['png'] as $bild) {
    // mach etwas mit dem Bild
}
// oder
foreach ($alleDateien as $typ => $dateien) {
    // $typ ist "png" in diesem Fall
    foreach ($dateien as $datei) {
        // mach etwas mit dem dateien
    }
}
 
Zurück
Oben