包含foreach循环文件夹中的文件 - 无法正常工作。为什么?

时间:2012-06-15 15:22:00

标签: php mysql drupal include glob

我的做法大致与this Q&A的说法相似:

$filenames = glob("../webform/components/*.inc");
foreach ($filenames as $filename)
{
    include $filename;
    echo $filename;
} 

但不是一堆包含的文件,我只是在试图:

Warning: Invalid argument supplied for foreach() in include_once() ...

$filenames似乎是空的。那为什么会这样? (我已经检查过该文件夹包含.inc文件!)

2 个答案:

答案 0 :(得分:1)

var_dump($filenames)。你得到一个空数组,例如

array(0) {
}

如果是这样,glob工作,但没有找到任何文件。如果你得到一个布尔值false,例如

bool(false)

然后全局失败 - 错误的路径,不可读的目录等......

答案 1 :(得分:0)

如果您是在模块内的Drupal中执行此操作,则使用相对路径可能无效,因为index.php中的DRUPAL_ROOT是运行代码的位置。

您可能希望将其更改为以下(1)或(2):

// Assuming your webform folder is at sites/all/modules/[MODULE_NAME]/webform
$pattern = drupal_get_path('module', 'MODULE_NAME') . '/webform/components/*.inc'; // (1)
// Assuming the context is MODULE_NAME.module.
// $pattern = dirname(__FILE__) . '/webform/components/*.inc'; // (2)
$filenames = glob($pattern);
foreach ($filenames as $filename) {
    include $filename;
    echo $filename;
}

如果您是从模块外部而不是Drupal网站根目录中的脚本执行此操作,请使用DRUPAL_ROOT设置要搜索的正确模式。

(Drupal 7)