Mittwoch, Januar 29, 2020

Wie kann ich rekursiv alle Dateien mit einem bestimmten Namen in einem Ordner mit PHP?

Angenommen ich habe einen Ordner mit dem Namen parent
Dort gibt es viele Unterordner wie child1, child2 etc.
Einige dieser „Kind“ – Ordner eine Datei namens module.php.
Wie kann ich rekursiv überprüfen Sie alle Unterordner des parent Ordner und alle Dateien namens module.php in meine Anwendung ein?

Ich habe versucht, das unten und kann nicht herausfinden, was falsch ist:

if ( !function_exists( 'glob_recursive' ) ) {
  function glob_recursive( $pattern, $flags = 0 ) {
    $files = glob( $pattern, $flags );
    foreach ( glob( dirname( $pattern ) . '/*', GLOB_ONLYDIR|GLOB_NOSORT ) as $dir ) {
      $files = array_merge( $files, glob_recursive( $dir . '/' . basename( $pattern ), $flags ) );
    }
    return $files;
  }
}

foreach ( glob_recursive( locate_template('/lib/modules/*/module.php' ) as $module ) {
  require_once $module;
}
  • Wie etwa php.net/manual/en/function.glob.php?
  • AFAIK glob arbeitet nicht rekursiv
  • Oh, du hast Recht, mein schlechtes. Der iterator tun sollten, in der Frage weiter unten.
  • Ich aktualisierte meinen obigen post zu zählen, was ich getan habe, einschließlich einer glob_recursive Funktion. Aber wie es scheint, bin ich etwas fehlt…
  • dies ist der Grund, warum ich möchte, um loszuwerden, php, sobald ich mir leisten kann zu
InformationsquelleAutor Aristeides | 2013-06-02

1 Kommentar

  1. 4

    Obwohl es klingt wie ein schlechtes design um alle Dateien, es ist möglich:

    $directory = new RecursiveDirectoryIterator('path/to/project/');
    $recIterator = new RecursiveIteratorIterator($directory);
    $regex = new RegexIterator($recIterator, '/\/module.php$/i');
    
    foreach($regex as $item) {
        include $item->getPathname();
    }

    Btw, das Beispiel ist abgeleitet von einer Kommentar in der PHP-manual. Damit es funktioniert, stellen Sie sicher, dass alle sub-Ordner lesbar sind, die von PHP in diesem Ordner. Wenn nicht, machen diese sicher, dass Sie haben, um zu schreiben eine benutzerdefinierte rekursive Funktion dafür (aber dies ist unwahrscheinlich).

    Wieder, was Sie tun, ist nicht ein gutes design und wird zu Problemen führen (früher, als Sie vielleicht denken). Wenn Sie nach den OOP-Stil, ein besserer Ansatz wäre, um die autload – Mechanismus von PHP.

    • Wenn Sie einen Blick auf meinen ursprünglichen Beitrag habe ich aktualisiert, um eine Probe von dem, was ich versuche zu tun. 🙂
    • Aber mein Beispiel sollte den trick tun, nicht wahr? (habe es getestet)

Kostenlose Online-Tests