Включить весь каталог php - PullRequest
       19

Включить весь каталог php

2 голосов
/ 11 ноября 2011

Допустим, у нас есть индексная страница, которая включает php/common.php.

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

Код выше расположен в common.php. Таким образом, index.php включает common.php, а общий должен включать все файлы из папки functions, расположенной в одной папке с common.php

Когда я пытаюсь вызвать какую-то функцию (которая находится в одном из файлов папки php/functions) из index.php, появляется сообщение об ошибке Call to undefined function. Вместо этого использовал приведенный ниже код (для проверки наличия проблем с циклом foreach)

include "functions/ipdetect.php";

Получил результат. Так почему же foreach не работает в моем случае? Может быть php fireach foreach ПОСЛЕ включения common.php в index.php?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

У меня работает (см. Код ниже - это полные файлы).Запуск php index.php из командной строки выводит «Hello World!».Подсказка: поместите некоторый глобальный код в один из включаемых файлов (см. A.php ниже; раскомментируйте эхо).Это должно сказать вам, если файл включен.Кстати, как уже говорили другие, всегда используйте include_once, если у вас нет веских причин не делать этого.

--- index.php ----

<?php
include "common.php";
echo f()."\n";
?>

--- common.php---

<?php
foreach (glob("functions/*.php") as $filename)
{
    include $filename;
}
?>

--- functions / a.php ---

<?php
//echo "*** In a.php ***\n";
function f(){
return "Hello World!";
}
?>
2 голосов
/ 11 ноября 2011

Для начала вы должны использовать include_once, это мешает вам включать вещи дважды, что приводит к большему количеству ошибок, а незначительные накладные расходы делают очень мало.

foreach (glob("functions/*.php") as $filename)
{
    include_once $filename;
}

Является ли папка «functions» в корневом каталоге илив папке "php", что общего находится в?Если под php вам понадобится это изменение:

foreach (glob("php/functions/*.php") as $filename)
{
    include_once $filename;
}

Редактировать удалено неправильное объяснение - прочитайте комментарии Даррена Кука:

@ DEVastor Прямое включение работает, потому что это был ваш глоб ()не работает, не включая ().

...