Php как подключить все файлы из папки
Перейти к содержимому

Php как подключить все файлы из папки

  • автор:

Базовые возможности PHP

При разработке программ на PHP, возможно, какую-ту часть кода мы захотим использовать одновременно в других файлах с кодом PHP. В этом случае отдельные части кода можно распределить по отдельным файлам. Это позволить не писать один и тот же код по сто раз на сотнях скриптов, а будет достаточно подключить файл с кодом PHP. Кроме того, если потребуется изменить поведение подключаемого кода, достаточно будет изменить код в подключаемом файле.

Для подключения файлов PHP предоставляет ряд возможностей.

Инструкция include

Инструкция include подключает в программу внешний файл с кодом php. Так, для примера определим файл welcome.php :

Здесь определена функция welcome , которая в качестве параметра принимает условное имя и использут его для вывода приветствия.

Теперь подключим данный файл в нашу программу, которая определена в другом файле в той же папке:

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

Конструкция include может использовать как относительные, так и абсолютные пути. Например, выше использовался относительный путь. Или, к примеру, если мы имеем следующую структуру

  • Файл index.php
  • Папка scripts
    • Файл welcome.php

    То чтобы подключить файл welcome.php из папки scripts , в файле index.php необходимо использовать следующий относительный путь:

    include "scripts/welcome.php";

    Если файл welcome.php располагается по полному пути C:\localhost\scripts\welcome.php , то также можно было бы использовать абсолютный — полный путь:

    include "C:\localhost\scripts\welcome.php";

    Инструкция include_once

    Использование инструкции include имеет недостатки. Так, мы можем в разных местах кода неумышленно подключить один и тот же файл, что при выполнении кода вызовет ошибки.

    Чтобы исключить повторное подключение файла, вместо инструкции include следует применять инструкцию include_once

    И теперь, если мы подключим этот же файл с помощью include_once еще где-нибудь ниже, то это подключение будет проигнорировано, так как файл уже подключен в программу.

    Инструкции require и require_once

    Действие инструкции require подобно инструкции include: она также подключает внешний файл, вставляя в программу его содержимое. Только теперь, если данный файл не будет найден, действие программы прекратится (инструкция include в этом случае выбрасывает предупреждение):

    И также если у нас в коде встретятся несколько инструкций require , которые подключают один и тот же файл, то интерпретатор выдаст ошибку. И также чтобы избежать данной ситуации, следует использовать инструкцию require_once :

    Функция spl_autoload_register

    В больших приложениях количество подключаемых файлов может быть довольно большим. Однако встроенная функция spl_autoload_register() в определенных ситуациях позволяет избежать большого количества инклудов. В качестве параметра она принимает функцию автозагрузки. Эта функция автоматически вызывается, когда в программе начинает использоваться неизвестный класс или интерфейс. И функция автозагруки пытается загрузить этот класс или интерфейс. В качестве параметра функция автозагрузки принимает название класса или интерфейса, которые надо загрузить.

    Например, пусть у нас будет файл Person.php , в котором располагается класс Person :

    name = $name; $this->age = $age; > function printInfo() < echo "Name: $this->name
    Age: $this->age"; > > ?>

    Обращаю внимание, что название файла соответствует названию класса.

    Используем функцию автозагрузки для подключения подобного класса:

    "; include $class . ".php"; > spl_autoload_register("my_autoloader"); $tom = new Person("Tom", 25); $tom->printInfo(); ?>

    Функция spl_autoload_register() в качестве параметра принимает название функции автозагрузки — в данном случае это функция my_autoloader() . В качестве параметра она принимает название класса. Например, в данном случае используется класс Person, который в этом скрипте не определен. И когда программа встретит использование данного класса, она вызовет функцию my_autoloader() , в качестве параметра $class передаст в нее название класса Person.

    Все действия функции автозагрузки мы определяем сами. В данном случае с помощью echo выводится некоторое диагностическое сообщение и подключается файл класса:

    include $class . ".php";

    При этом в данном случае неважно какой класс, главное, чтобы он хранился в одноименном файле с расширением .php . В этом случае программа выведет следующее:

    Вызов функции автозагрузки Name: Tom Age: 25

    get_included_files

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

    Список параметров

    У этой функции нет параметров.

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

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

    Скрипт, который был загружен изначально, рассматривается как «включённый файл», поэтому он также попадёт в список файлов включённых функцией include или другими.

    Файлы, добавляемые в скрипт неоднократно, попадут в массив только в одном экземпляре.

    Примеры

    Пример #1 Пример использования get_included_files()

    // Этот скрипт расположен в файле abc.php

    include ‘test1.php’ ;
    include_once ‘test2.php’ ;
    require ‘test3.php’ ;
    require_once ‘test4.php’ ;

    foreach ( $included_files as $filename ) echo » $filename \n» ;
    >

    Результат выполнения приведённого примера:

    /path/to/abc.php /path/to/test1.php /path/to/test2.php /path/to/test3.php /path/to/test4.php

    Смотрите также

    • include — include
    • include_once — include_once
    • require — require
    • require_once — require_once
    • get_required_files() — Псевдоним get_included_files

    Improve This Page

    User Contributed Notes 7 notes

    19 years ago

    As of PHP5, this function seems to return an array with the first index being the script all subsequent scripts are included to.
    If index.php includes b.php and c.php and calls get_included_files(), the returned array looks as follows:

    If you want to know which is the script that is including current script you can use $_SERVER[‘SCRIPT_FILENAME’] or any other similar server global.

    If you also want to ensure current script is being included and not run independently you should evaluate following expression:

    If this expression returns TRUE, current script is being included or required.

    16 years ago

    If you have a MAIN php script which you don’t want to be included by other scripts, you could use this function. For example:

    main.php:
    function blockit ()
    $buf = get_included_files ();
    return $buf [ 0 ] != __FILE__ ;
    >

    blockit () and exit( «You can not include a MAIN file as a part of your script.» );

    print «OK» ;
    ?>

    So other script couldn’t include main.php to modify its internal global vars.

    4 years ago

    It’s perhaps not clear from the existing docs that the returned list contains nested include files as well.

    That is, if A.php includes B.php, and B.php includes C.php, the result returned when calling get_included_files() from inside A.php WILL contain ‘C.php’.

    18 years ago

    As is often the case, YMMV. I tried the __FILE__ and SCRIPT_FILENAME comparison and found this:

    SCRIPT_FILENAME: /var/www/cgi-bin/php441
    __FILE__: /raid/home/natpresch/natpresch/RAY_included.php

    As an alternative:

    Gives one when the script is standalone and always more than one when the script is included.

    12 years ago

    This function aims to perform filtering of files that have been included :

    function setIncludeFiles ( $arrayInc = array()) <
    $incFiles = get_included_files ();
    if(( count ( $arrayInc )> 0 )&&( count ( $incFiles )> 0 )) <
    $aInt = array_intersect ( $arrayInc , $incFiles );
    if( count ( $aInt )> 0 ) <
    return false ;
    >elseif( count ( $aInt ) < 1 ) <
    foreach( $arrayInc as $inc ) <
    if( is_file ( $inc ))
    include( $inc );
    else <
    return false ;
    >
    >
    >
    >else <
    return false ;
    >
    >
    ?>

    Usage :

    $toBeInclude = array( ‘/data/your_include_files_1.php’ ,
    ‘/data/your_include_files_2.php’ ,
    ‘/data/your_include_files_3.php’ ,
    );
    setIncludeFiles ( $toBeInclude );
    ?>

    Return false if something goes wrong.

    2 years ago

    This is a great way to emulate Python’s ‘__name__ = «__main__»‘

    if( get_included_files ()[ 0 ] === __FILE__ ) doStuff ();
    ?>

    17 years ago

    Something that’s not noted in the docs, if a file is included remotely and you do a get_included_files() in the include itself it will *not* return the document that included it.

    ?>

    test3.php (server 192.168.1.11):

    print_r ( $files );
    ?>

    returns:

    Array ( [0] => /var/www/localhost/htdocs/test/test3.php )

    Which means you can use get_included_files() to help intercept and prevent XSS-style attacks against your code.

    • Опции PHP/информационные функции
      • assert
      • cli_​get_​process_​title
      • cli_​set_​process_​title
      • dl
      • extension_​loaded
      • gc_​collect_​cycles
      • gc_​disable
      • gc_​enable
      • gc_​enabled
      • gc_​mem_​caches
      • gc_​status
      • get_​cfg_​var
      • get_​current_​user
      • get_​defined_​constants
      • get_​extension_​funcs
      • get_​include_​path
      • get_​included_​files
      • get_​loaded_​extensions
      • get_​required_​files
      • get_​resources
      • getenv
      • getlastmod
      • getmygid
      • getmyinode
      • getmypid
      • getmyuid
      • getopt
      • getrusage
      • ini_​alter
      • ini_​get_​all
      • ini_​get
      • ini_​parse_​quantity
      • ini_​restore
      • ini_​set
      • memory_​get_​peak_​usage
      • memory_​get_​usage
      • memory_​reset_​peak_​usage
      • php_​ini_​loaded_​file
      • php_​ini_​scanned_​files
      • php_​sapi_​name
      • php_​uname
      • phpcredits
      • phpinfo
      • phpversion
      • putenv
      • set_​include_​path
      • set_​time_​limit
      • sys_​get_​temp_​dir
      • version_​compare
      • zend_​thread_​id
      • zend_​version
      • assert_​options
      • get_​magic_​quotes_​gpc
      • get_​magic_​quotes_​runtime
      • restore_​include_​path
      • Copyright © 2001-2024 The PHP Group
      • My PHP.net
      • Contact
      • Other PHP.net sites
      • Privacy policy

      Как получить список файлов внутри папки (включая подпапки) на PHP

      Готовая PHP-функция, которая получает список всех файлов, находящихся в заданной папке. Также по умолчанию включаются файлы находящиеся во вложенных папках: параметр $recursive = true .

      Результатом работы функции является массив со списком всех файлов (и папок если $include_folders = true ).

      /** * Получает пути всех файлов и папок в указанной папке. * * @param string $dir Путь до папки (на конце со слэшем или без). * @param bool $recursive Включить вложенные папки или нет? * @param bool $include_folders Включить ли в список пути на папки? * * @return array Вернет массив путей до файлов/папок. */ function get_dir_files( $dir, $recursive = true, $include_folders = false )< if( ! is_dir($dir) ) return array(); $files = array(); $dir = rtrim( $dir, '/\\' ); // удалим слэш на конце foreach( glob( "$dir/[. ]*", GLOB_BRACE ) as $file ) < if( is_dir( $file ) )< if( $include_folders ) $files[] = $file; if( $recursive ) $files = array_merge( $files, call_user_func( __FUNCTION__, $file, $recursive, $include_folders ) ); >else $files[] = $file; > return $files; >
      $files = get_dir_files('/home/example.com/wp-includes/'); /* Array ( [0] => /home/example.com/wp-includes/ms-settings.php [1] => /home/example.com/wp-includes/embed.php [2] => /home/example.com/wp-includes/rest-api.php [3] => /home/example.com/wp-includes/registration.php [4] => /home/example.com/wp-includes/cron.php . */
      /** * Получает пути всех файлов в указанной папке, включая все вложенные уровни. * * @param $dir Путь до папки со слэшем на конце или без. * @return Вернет массив путей до файлов. */ function get_dir_files( $dir ) < $filenames = array(); $dir = rtrim( $dir, '/' ); // удалим слэш на конце if( is_dir($dir) )< if( $handle = opendir($dir) )< chdir( $dir ); while( false !== ($file = readdir($handle)) )< if( $file != "." && $file != '..' )< if( is_dir($file) )< $arr = get_dir_files( $file ); foreach( $arr as $value ) $filenames[] = $dir .'/'. $value; >else < $filenames[] = $dir .'/'. $file; >> > chdir('../'); > closedir( $handle ); > return $filenames; > $files = get_dir_files('/home/example.com/wp-includes/'); /* Array ( [0] => /home/example.com/wp-includes/ms-settings.php [1] => /home/example.com/wp-includes/embed.php [2] => /home/example.com/wp-includes/rest-api.php [3] => /home/example.com/wp-includes/registration.php [4] => /home/example.com/wp-includes/cron.php . */

      Эта заметка встроена в: Полезные PHP коды — для опытных

      Как получить все файлы в папке и прописать для них include?

      Представим, что я имею в директории ~www/test.ru папку papka (~www/test.ru/papka), в этой папке находятся файлы 1.php ,2.php . 50.php (от 1 до 60). Также, в самом домене есть корневой файл index.php . В нем на данный момент имеется данный скрипт:

      Как я могу средствами php получить все файлы из каталога papka и прописать для них include, как в скрипте выше, чтобы не писать 50 раз для каждого файла, а для всех сразу.?

      • Вопрос задан более трёх лет назад
      • 218 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *