Как определить, что файл уже был необходим? - PullRequest
5 голосов
/ 26 июля 2011

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

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

Ответы [ 5 ]

26 голосов
/ 26 июля 2011

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

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

15 голосов
/ 28 июля 2013

массив get_included_files ( void )

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

Получает имена всех файлов, которыебыли включены с использованием include , include_once , require или require_once

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

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

Первоначально вызванный скрипт считается «включенным файлом», поэтому он будет указан вместе с файлами, на которые ссылаются 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

4 голосов
/ 26 июля 2011

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

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

2 голосов
/ 26 июля 2011

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

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

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

0 голосов
/ 26 июля 2011

Вы также можете сделать свою собственную функцию 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;
}
?>
...