Как определить, был ли файл уже необходим?


Я создал глобальный файл php(globs.php), и потребовал этого на всех моих страницах. Однако некоторые страницы теперь включают другие страницы, и я получаю сообщение об ошибке, когда он пытается потребовать globs.php еще раз.

Как я могу определить, требуется ли файл? Таким образом, я мог бы сделать, если бы!требовалось ('globs.php ') требовать ('globs.php ").

Author: Rich Darvins, 2011-07-26

5 answers

Вы также можете создать свою собственную функцию require_file:

<?php
function require_file($file_path){
    static $required_files=array();
    if(!isset($required_files[$file_path])){
        require $file_path;
        $required_files[$file_path]=true;
        return true;
    }
    return false;
}
?>
 -3
Author: Mateusz Krzeszowiak, 2011-07-25 23:20:52

Вместо этого используйте require_once:

Оператор _require_once_ идентичен require, за исключением того, что PHP проверит, был ли файл уже включен, и если да, то не будет включать (требовать) его снова...

 19
Author: Umang, 2016-09-23 11:48:41

массив get_included_files ( пустота )

Http://www.php.net/manual/en/function.get-included-files.php

Возвращает имена всех файлов, которые были включены с помощью включить, включение_онсе, требовать или требовать_онсе

Возвращаемые значения

Возвращает массив имен всех файлов.

Первоначально вызванный сценарий считается "включенным файлом", поэтому он будет быть перечислены вместе с файлами, на которые ссылаются include и family.

Файлы, которые включены или требуются несколько раз, отображаются в возвращаемом массиве только один раз.


get_included_files() пример

<?php
// This file is abc.php

include 'test1.php';
include_once 'test2.php';
require 'test3.php';
require_once 'test4.php';

$included_files = get_included_files();

foreach ($included_files as $filename) {
    echo "$filename\n";
}

?>

Приведенный выше пример выведет:

abc.php
test1.php
test2.php
test3.php
test4.php

 14
Author: Greg, 2016-06-13 16:24:25

Лучшим решением является require_once(), который использует тот же синтаксис, что и require(), но выполняет проверку, о которой вы говорите, автоматически.

Если вам действительно нужно знать, требовалось ли это уже, я предлагаю определить константу в вашем включенном файле и проверить ее значение.

 4
Author: Winfield Trail, 2011-07-25 23:13:29

Предполагая, что в файле, который вы хотите включить, определена функция, вы также можете выполнить быстрый

 if (!function_exists('foo')) {
     require('bar.php');
 }

Используйте то, что лучше всего подходит для вашей настройки.

 2
Author: WisdomPanda, 2011-07-25 23:20:28