是否有一种简单的方法可以要求文件夹中的所有文件?
答案 0 :(得分:47)
可能只做这样的事情:
$files = glob($dir . '/*.php');
foreach ($files as $file) {
require($file);
}
使用opendir()
和readdir()
可能比glob()
更有效。
答案 1 :(得分:23)
没有简短的方法,你需要在PHP中实现它。这样的事情就足够了:
foreach (scandir(dirname(__FILE__)) as $filename) {
$path = dirname(__FILE__) . '/' . $filename;
if (is_file($path)) {
require $path;
}
}
答案 2 :(得分:12)
没有简单的方法,就像在Apache中一样,只有Include /path/to/dir
,所有文件都包含在内。
可能的方法是使用SPL中的RecursiveDirectoryIterator:
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
个结尾文件,无论它们在结构中有多深。
答案 3 :(得分:9)
简单:
foreach(glob("path/to/my/dir/*.php") as $file){
require $file;
}
答案 4 :(得分:3)
foreach
循环。foreach (glob("classes/*") as $filename) {
require $filename;
}
有关详细信息,请查看this previously posted question:
答案 5 :(得分:0)
as require_all()函数:
//require all php files from a folder
function require_all ($path) {
foreach (glob($path.'*.php') as $filename) require_once $filename;
}
答案 6 :(得分:0)
递归地将所有文件列表和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);
}
答案 7 :(得分:0)
我要求所有兄弟姐妹的方式:
<?php
$files = glob(__DIR__ . '/*.php');
foreach ($files as $file) {
// prevents including file itself
if ($file != __FILE__) {
require($file);
}
}
答案 8 :(得分:0)
使用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');
答案 9 :(得分:0)
我遇到了这个问题并修改了一些公认的答案。我的策略是将此文件放在文件夹中,然后在其他地方使用。
<?php
// The generic "load everything in this folder except myself"
foreach (scandir(__DIR__) as $filename) {
if (!in_array($filename, [basename(__FILE__), ".", ".."])) {
$path = __DIR__ . DIRECTORY_SEPARATOR . $filename;
if (is_file($path)) {
require_once $path;
}
}
}
如果您有 Controllers
或 Models
之类的文件夹,这将非常有用。它允许您创建新文件而无需担心 require
。