Требовать все файлы в папке - PullRequest
47 голосов
/ 22 апреля 2010

Есть ли простой способ требовать все файлы в папке?

Ответы [ 9 ]

48 голосов
/ 22 апреля 2010

Вероятно, только делая что-то вроде этого:

$files = glob($dir . '/*.php');

foreach ($files as $file) {
    require($file);   
}

Может быть более эффективно использовать opendir() и readdir(), чем glob().

23 голосов
/ 22 апреля 2010

Нет короткого пути сделать это, вам нужно будет реализовать его на PHP. Что-то вроде этого должно быть достаточно:

foreach (scandir(dirname(__FILE__)) as $filename) {
    $path = dirname(__FILE__) . '/' . $filename;
    if (is_file($path)) {
        require $path;
    }
}
12 голосов
/ 22 апреля 2010

Нет простого способа, как в Apache, где вы можете просто Include /path/to/dir, и все файлы будут включены.

Возможный способ - использовать RecursiveDirectoryIterator из SPL:

function includeDir($path) {
    $dir      = new RecursiveDirectoryIterator($path);
    $iterator = new RecursiveIteratorIterator($dir);
    foreach ($iterator as $file) {
        $fname = $file->getFilename();
        if (preg_match('%\.php$%', $fname)) {
            include($file->getPathname());
        }
    }
}

Это приведет к извлечению всех конечных файлов .php из $path, независимо от их глубины в структуре.

9 голосов
/ 25 марта 2011

Простой:

foreach(glob("path/to/my/dir/*.php") as $file){
    require $file;
}
3 голосов
/ 22 апреля 2010

Используйте foreach Loop.

foreach (glob("classes/*") as $filename) {
  require $filename;
}

Для получения более подробной информации, проверьте этот ранее опубликованный вопрос :

0 голосов
/ 02 октября 2018

Решение с использованием opendir, readdir, closedir.Сюда также входят подкаталоги.

<?php
function _require_all($path, $depth=0) {
    $dirhandle = @opendir($path);
    if ($dirhandle === false) return;
    while (($file = readdir($dirhandle)) !== false) {
        if ($file !== '.' && $file !== '..') {
            $fullfile = $path . '/' . $file;
            if (is_dir($fullfile)) {
                _require_all($fullfile, $depth+1);
            } else if (strlen($fullfile)>4 && substr($fullfile,-4) == '.php') {
                require $fullfile;
            }
        }
    }

    closedir($dirhandle);
}        

//Call like
_require_all(__DIR__ . '/../vendor/vlucas/phpdotenv/src');
0 голосов
/ 10 ноября 2017

Мой способ требовать всех братьев и сестер:

<?php
$files = glob(__DIR__ . '/*.php');
foreach ($files as $file) {
    // prevents including file itself
    if ($file != __FILE__) {
        require($file);
    }
}
0 голосов
/ 02 мая 2016

рекурсивно весь список файлов и require_once в одном каталоге:

$files = array();

function require_once_dir($dir){

       global $files;

       $item = glob($dir);

       foreach ($item as $filename) {

             if(is_dir($filename)) {

                  require_once_dir($filename.'/'. "*");

             }elseif(is_file($filename)){

                  $files[] = $filename;
             }
        }
}

$recursive_path = "path/to/dir";

require_once_dir($recursive_path. "/*");

for($f = 0; $f < count($files); $f++){

     $file = $files[$f];

     require_once($file);
}
0 голосов
/ 10 января 2013

Как функция require_all ():

//require all php files from a folder
function require_all ($path) {

    foreach (glob($path.'*.php') as $filename) require_once $filename;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...