Функции PHP: require(), require_once(), include(), include_once(). Разница между require, include, require_once и include_once? Php require once описание

20.02.2024

При разработке любого сайта и любой сложности, нужно в первую очередь брать направление на корректность написания кода. Например, если создавать весь код с многочисленными файлами на одной странице, то это приведет к путанице и большим неудобствам. А для этого нужно файлы разнести по категориям, а потом подключать их в основной код в нужных местах. Такой способ можно назвать — включаемые файлы. Это довольно простое название, но для человека, который в первый раз столкнулся с данной темой, можно и так назвать. А для того, чтобы можно было собрать все включаемые файлы в один код, нужно применить о которых написано в предыдущей статье, или использовать инструкции require и require_once о которых написано в данном тексте.

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

Синтаксис данных инструкций такой:

Require_once ‘config.php’; — файл настроек
require_once ‘header.php’; — шапка сайта
require ‘left.php’; — левый сайдбар
require ‘content.php’; — контент сайта
require ‘footer.php’; — подвал сайта

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

А вот инструкция require работает немного иначе. Подключенный с ее помощью файл, транслируется до выполнения сценария, другими словами, на момент обработки всего кода, этот файл уже оттранслирован!!! А отсюда и вывод — файлы подключенные инструкцией require — будут работать быстрее. И для меня например, данная инструкция предпочтительней. Но конечно и тут есть одно НО! При загрузке страницы браузером, может произойти сбой интернета и пользователь может увидеть только ту часть страницы, которая успела загрузиться. Или при каком то сбое в обработке, дальше зависшего файла обработка не пойдет. Но в web-сайте такое случается редко, так что данная инструкция все таки предпочтительней.

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

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

Июль 2019
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

РЕКЛАМА

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

    Структура движка сайта, из чего состоит движок сайта, панель управления сайтом, шаблонизатор. В предыдущей статье было описано о том, что

    Что такое движок для сайта, как сделать движок сайта, система управления сайтом на php. Для того чтобы понять что такое

Если функции вынесены в отдельный файл, то подключить его позволяют два оператора require и include. Операторы имеют следующий формат:
require(<Имя файла>);
require <Имя файла>;
include(<Имя файла>);
include <Имя файла>;
Вынесем функцию f_Sum() в отдельный файл (листинг 17 ) и подключим его с помощью оператора require (листинг 16 ).

Листинг 16 . Использование оператора require

Листинг 17 . Содержимое файла script.inc

Создать файл script.inc можно, например, с помощью Notepad++. Следует отметить, что подключаемый файл может иметь любое расширение, хотя общепринято давать подключаемым файлам расширение inc (от "include").
Попробуем открыть файл script.inc с помощью Web-браузера. В итоге в окне Web-браузера отобразится исходный код:

По этой причине необходимо размещать включаемые файлы в каталоге, доступном только для сценария, но недоступном через Интернет. При установке и настройке PHP мы указали местонахождение включаемых файлов в директиве include_path файла php.ini:

include_path = ".;C:\php5\includes"

Здесь через точку с запятой указано два места для поиска включаемых файлов:
□ . (точка) — в той же папке, что и исполняемый файл;
C:\php5\includes — в папке includes (c:\php5\includes).
Иными словами, не найдя включаемого файла в той же папке, что и исполняемый файл, интерпретатор произведет поиск в папке includes (c:\php5\includes).
Можно также сохранять включаемый файл с расширением php. В этом случае исходный код не будет отображаться в окне Web-браузера.

Если включаемый файл содержит исполняемый код, то указывать PHP-дескрипторы нужно обязательно. Иначе PHP-код будет выведен как обычный текст, а при вызове определенных в нем функций отобразится сообщение об ошибке:
function f_Sum($x, $y=2) { return ($x + $y); }
Fatal error: Call to undefined function f_Sum() in
C:\Apache2\htdocs\index.php on line 9
Иными словами, во включаемом файле может и не быть кода PHP. Для примера вынесем верхний колонтитул и функцию f_Sum() в файл header.inc (листинг 19 ), а нижний колонтитул в файл footer.inc (листинг 20 ). Затем подключим эти файлы к основному сценарию (листинг 18 ).

Листинг 18 . Размещение HTML-кода во включаемом файле

Листинг 19 . Содержимое файла header.inc

Функции

Листинг 20 . Содержимое файла footer.inc

В листинге 21 приведен исходный HTML-код после выполнения предыдущей программы.

Листинг 21 . Исходный HTML-код

Функции 7

Таким образом можно сформировать шаблоны для множества страниц. Интерпретатор, встретив оператор require , сделает содержимое включаемого файла частью страницы. Если файл не может быть загружен, то оператор генерирует неисправимую ошибку и сценарий прекращает работу.
Вместо оператора require можно использовать оператор include . Если включаемый файл не найден, оператор выведет сообщение об ошибке, но сценарий будет выполняться далее. Если этот файл содержит функции, то каждый вызов функции из этого файла также будет генерировать ошибку.

Оператор include возвращает true , если файл загружен, и false в случае ошибки. Подавить сообщение об ошибке можно с помощью оператора @ (листинг 22 ).

Листинг 22 . Подавление сообщения об ошибке

Конструкция включений require

Конструкция require позволяет включать файлы в сценарий PHP исполнения сценария PHP. Общий синтаксис require такой:

require имя_файла;

При запуске (именно при запуске, а не при исполнении!) программы интерпретатор просто заменит инструкцию на содержимое файла имя_файла (этот файл может также содержать сценарий на PHP, обрамленный, как обычно, тэгами и ?> ). Причем сделает он это непосредственно перед запуском программы (в отличие от , который рассматривается ниже). Это бывает довольно удобно для включения в вывод сценария различных шаблонных страниц HTML-кодом. Приведем пример:

Файл header.html:

It is a title

Файл footer.html:
Home Company, 2005.

Файл script.php
require "header.htm";
// Сценарий выводит само тело документа
require "footer.htm";
?>

Таким образом, конструкция require позволяет собирать сценарии PHP из нескольких отдельных файлов, которые могут быть как html -страницами, так и php -скриптами.

Конструкция require поддерживает включения удаленных файлов (начиная с версии PHP 4.3.0). Например:

// Следующий пример на работает, поскольку пытается включить локальный файл
require "file.php?foo=1&bar=2" ;
// Следующий пример работает
require ;
?>

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

Включения удаленных файлов

PHP позволяет работать с объектами URL, как с обычными файлами. Упаковщики, доступные по умолчанию, служат для работы с удаленными файлами с использованием протокола ftp или http.

Если "URL fopen-оболочки " включены в PHP (как в конфигурации по умолчанию), вы можете специфицировать файл, подключаемый с использованием URL (через HTTP), вместо локального пути. Если целевой сервер интерпретирует целевой файл как PHP-код, переменные могут передаваться в подключаемый файл с использованием URL-строки запроса, как в HTTP GET. Строго говоря, это не то же самое, что подключение файла и наследование им области видимости переменных родительского файла; ведь скрипт работает на удалённом сервере, а результат затем подключается в локальный скрипт.

Для того, чтобы удаленное включение файлов было доступно, необходимо в конфигурационном файле (php.ini) установить allow_url_fopen=1.

Обратите внимание : Версии PHP для Windows до PHP 4.3.0 не поддерживают возможность использования удаленных файлов этой функцией даже в том случае, если опция allow_url_fopen включена.


/* Здесь предполагается, что www.example.com сконфигурирован для разбора.php
* файлов, а не.txt файлов. Также "Works" здесь означает, что переменные
* $foo и $bar доступны в подключённом файле. */

// Не будет работать, так как file.txt не обрабатывается www.example.com как PHP
include "http://www.example.com/file.txt?foo=1&bar=2" ;

// Не будет работать, поскольку ищет файл "file.php?foo=1&bar=2" в локальной
// файловой системе.
include "file.php?foo=1&bar=2" ;

// Следующий пример работает:
include "http://www.example.com/file.php?foo=1&bar=2" ;

$ foo = 1 ;
$ bar = 2 ;
include "file.txt" ; // Работает
include "file.php" ; // Работает

?>

Операторы PHP: require(), require_once(), include_once()

Дата: 2012-10-15

Функции PHP: require(), require_once(), include(), include_once()

В прошлом уроке мы подробно разобрали работу . Напомню, что оператор include() в PHP подставляет содержание одной веб-страницы, в другую web-страницу. Но в PHP есть и другие функции, позволяющие реализовать аналогичную задачу. В частности это функции:

include_once()
require()
require_once()

Чтобы вставить содержание определенной web-страницы, достаточно в качестве аргумента (в скобках) этих функций указать путь к нужному файлу. Например, вот так:

include("file.php") или require("file.php")

Задача у всех этих функций одна и та же: вставить нужный код или текст из одного файла в другой файл. Но, все-таки, эти функции отличаются между собой. Давайте разбираться чем.

Суффикс "_once " позволяет подключить код файла для подстановки в другой файл только один раз, сколько бы вызовов не осуществлялось. Для наглядности давайте разберем простой пример. В прошлом уроке мы разобрались, что с помощью оператора include() , можно вынести шапку сайта в отдельный файл header.php , для простоты будем считать, что в этот файл мы выносим графический логотип сайта. В нужном месте web-страницы (в данном случае на месте шапки сайта) прописываем код Листинга 1 .

Листинг 1.

То соответственно и логотип сайта тоже выведется два раза, примерно вот таким образом:

Согласитесь, смотрится не очень красиво, правда? Получается, что оператор include() два раза вытаскивает из папки blocks файл header.php и два раза подставляется его на место шапки сайта.

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

На больших сайтах очень легко запутаться, где и какой файл Вы включали и можно ли включить его повторно, а это может привести к ошибке. Поэтому придумали приставку "_once " к функциям include и require , которая включает содержание файла в другую web-страницу только один раз .

Чем функция include() отличается от require()

Теперь давайте поговорим, чем функция include() отличается от функции require() . В самой работе у них отличий нет. И та и другая функции включают содержание одного файла в другой. Но отличие у них есть и заключается оно в способе реагирования на ситуацию, когда файла, который мы подключаем, не оказывается на месте.

Давайте вернемся к предыдущему примеру код Листинга 1 . У нас есть следующий код:

Include ("blocks/header.php");

Давайте попробуем удалить файл header.php , который мы собственно и подключаем, например файл поврежден или случайно был удален с севера.

Обновляем тестовый файл и видим вот такую ошибку:

Как Вы видите, появилось сообщение о том, что в директории (папке) blocks не найден файл header.php , но программа дальше все равно выполняется и остальная часть web-страницы сайта отображается нормально.

А если мы напишем код (Листинг 3 ) используя функцию require() :

Листинга 3 .

Require ("blocks/header.php");

То у нас будет выведено только одно сообщение об ошибке , и программа дальше выполняться не будет , и Вы увидете только вот такое сообщение.

Макеты страниц

13.22. Оператор require()

Принцип работы оператора require() подобен директиве препроцессора #include() в языке программирования C++. Если вы знакомы с этим языком, то освоить следующие операторы для вас не составит никакого труда, впрочем, даже если вы и не знакомы, мы постараемся более подробно описать принципы работы данных операторов. Оператор require() заменяет, вызывает содержимое файлов, путь и имя которого были указаны в блоке оператора:

require("path/filename.html");

Если параметры URL fopen_wrapper_SB PHP установлены как enabled (допустимо) (как правило, они - default (недостаточная), то вы можете также производить определение файла в операторе require(), используя URL (Uniform Resource Locator - унифицированный указатель ресурса) вместо того, чтобы использовать локальный путь к необходимому файлу в операторе require(). Например:

$url = http://my_new_adress/index.phtml;

Оператор require() не является функцией. Скорее всего его можно назвать конструкцией языка. Почему мы не можем считать этот оператор функцией:

Require() не подчинен к каким-либо управляющим структурам;

Require() не возвращает какое-либо значение, что в свою очередь делает функция.

Попытка вызова какого-либо значения из оператора require() приведет к ошибке и прерыванию дальнейшего выполнения программы.

В отличие от include require всегда производит чтение строки адреса файла, даже в том случае, когда он не выполняется. Если вам необходимо условно включить файл, используйте оператор include(). Просто условные выражения не считаются эффективными при работе с оператором require Однако если строка, на которой расположен оператор requre не будет выполнена, то тогда не будет выполнена ни одна строка кода в файле по этому адресу. Это логично, так как именно доступ к файлу в данном случае и осуществляется через оператор require().

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

Следовательно/вы не можете помещать оператор require() со всеми прилагающимися к нему инструкциями в блок оператора цикла и ожидать при работе того самого цикла различного выполнения данного оператора на каждой итерации. Чтобы воспользоваться этим, предлагаем вам применить оператор include().

Когда файл работает с оператором require(), содержащийся кбд наследует переменные возможности строки, на которой requre() выполняется. Любые переменные, доступные на этой строке, будут доступны в пределах вызванного файла. Если оператор require внутри функции в пределах вызывающего файла, то весь код, содержащийся в вызванном файле, будет вести себя так, гак если бы он был определен внутри этой

В том случае, если оператор require() работает с файлом, который вызван через HTTP и использует fopen wrappers, и если адрес станции интерпретирует конечный файл как PHP-код, то в этом случае переменные могут быть переданы в оператор require(), используя URL-запрос, как метод HTTP Get. Это не то же самое. что вызов файла оператора require так как скрипт практически продолжает выполнение сценария на удаленном сервере и результаты будут потом включены в локальный сценарий:

/* не будет работать, так как не был обработан сервером*/

require("http://my_domain_name/file.txt?varone=1&vartwo=2");

/* не работать, так как имя файла "file.php?varone=1&vartwo=2"

ориентировано на локальную файловую систему */

require("file.php?varone=1&vartwo=2");

/* будет работать без ошибок */

require("http://my_domain_name/test.php?varone=1Svartwo=2");

require("file.txt");

require("file.php");

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