Глобус Foreach для включения файлов в подкаталог - PullRequest
1 голос
/ 05 февраля 2011

Я пытаюсь узнать, как включить все файлы в каталог, используя glob (), но, похоже, я не могу заставить его работать. Это код, который я сейчас имею:

foreach (glob("addons/*.php") as $filename) {
include $filename;
}

Тем не менее, один файл включительно работает нормально:

include "addons/hello.php";

Вот как выглядит моя файловая структура:

Тема

-addons

- hello.php

-index.php

-options.php

Так что я не уверен, где проблема. Код находится внутри самого подкаталога (theme), если это вообще что-то меняет. Спасибо.

Ответы [ 4 ]

3 голосов
/ 06 февраля 2011

Используйте это для тестирования:

foreach (glob("addons/*.php", GLOB_NOCHECK) as $filename) {
    PRINT $filename . "\n";
}

Если каталог не существует относительно текущего, то в качестве вывода будет отображаться addons/*.php.

1 голос
/ 29 августа 2012

Эта рекурсивная функция должна помочь:

function recursiveGlob($dir, $ext) {
    $globFiles = glob("$dir/*.$ext");
    $globDirs  = glob("$dir/*", GLOB_ONLYDIR);

    foreach ($globDirs as $dir) {
        recursiveGlob($dir, $ext);
    }

    foreach ($globFiles as $file) {
        include $file;
    }
}

Использование: recursiveGlob('C:\Some\Dir', 'php');

Если вы хотите, чтобы он выполнял другие действия с отдельным файлом, просто замените часть include $file.

0 голосов
/ 06 февраля 2011

Включить будет использовать путь поиска, который (хотя обычно он включает в себя текущий рабочий каталог) не ограничен этим ... использование glob () с относительным путем к каталогу всегда будет относительно текущего рабочего каталога.,Прежде чем войти в ваш цикл ... убедитесь, что ваш текущий рабочий каталог находится там, где вы думаете, что он использует echo getcwd () ... вы можете обнаружить, что в конце концов вы не в подкаталоге Theme;но подкаталог Theme находится в пути поиска.

0 голосов
/ 06 февраля 2011

Убедитесь, что путь к файлу является абсолютным (от корня вашего сервера).

В моем случае этот пример работает без проблем:

$dir = getcwd();//can be replaced with your local path

foreach (glob("{$dir}/addons/*.php") as $filename) {
     if(file_exists($filename))
     {
         //file exists, we can include it
         include $filename;
     }
     else
     {
         echo 'File ' . $filename . ' not found<br />';
     }
};
...