Конструкция включений require
Конструкция require позволяет включать файлы в сценарий PHP исполнения сценария PHP. Общий синтаксис require такой:
require имя_файла;
При запуске (именно при запуске, а не при исполнении!) программы интерпретатор просто заменит инструкцию на содержимое файла имя_файла (этот файл может также содержать сценарий на PHP, обрамленный, как обычно, тэгами и ?> ). Причем сделает он это непосредственно перед запуском программы (в отличие от , который рассматривается ниже). Это бывает довольно удобно для включения в вывод сценария различных шаблонных страниц HTML-кодом. Приведем пример:
Файл header.html:
Файл footer.html:
Home Company, 2005.
Файл script.php
require "header.htm";
// Сценарий выводит само тело документа
require "footer.htm";
?>
Таким образом, конструкция require позволяет собирать сценарии PHP из нескольких отдельных файлов, которые могут быть как html -страницами, так и php -скриптами.
Конструкция require поддерживает включения удаленных файлов (начиная с версии PHP 4.3.0). Например:
php
// Следующий пример на работает, поскольку пытается включить локальный файл
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 включена.
php
/* Здесь предполагается, что 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"); |
То у нас будет выведено только одно сообщение об ошибке , и программа дальше выполняться не будет , и Вы увидете только вот такое сообщение.
Если функции вынесены в отдельный файл, то подключить его позволяют два оператора 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-код
Таким образом можно сформировать шаблоны для множества страниц. Интерпретатор, встретив оператор require
, сделает содержимое включаемого файла частью страницы. Если файл не может быть загружен, то оператор генерирует неисправимую ошибку и сценарий прекращает работу.
Вместо оператора require
можно использовать оператор include
. Если включаемый файл не найден, оператор выведет сообщение об ошибке, но сценарий будет выполняться далее. Если этот файл содержит функции, то каждый вызов функции из этого файла также будет генерировать ошибку.
Оператор include возвращает true , если файл загружен, и false в случае ошибки. Подавить сообщение об ошибке можно с помощью оператора @ (листинг 22 ).
Листинг 22 . Подавление сообщения об ошибке
Для чего нужно использовать в файлах PHP оператора Include или Require
?
Очень удобно разбить одну большую программу или веб-страницу на несколько файлов. А бывает, что просто необходимо свой файл подключить к скрипту другого разработчика.
Расскажу один случай из моей жизни. Когда я начал заниматься изучением HTML, я создал свой первый сайт. Тогда я еще не знал, что существует язык программирования PHP. Сайт состоял из 100 страниц. Когда я добавлял статью, мне нужно было на каждой страничке в отдельности в меню указывать название и путь новой странички. Это был ужас, потому что, как вы понимаете, это занятие занимало уйму времени, пока я не узнал об операторе Include с возможностью подключать к своей странице сторонние файлы. Стоило мне только сделать изменение в одном стороннем файле, например, в меню, как на всех 100 страницах происходила замена. Удобно, быстро и модно .
Давайте на простом примере попробуем подключить к нашей веб-странице сторонний файл.
Создайте файл с именем «index.php » с таким кодом:
Можно вот так:
Теперь создайте файл «cop.php » с таким кодом:
Результат:
Итак, что мы сделали?
В файле «index.php
» мы осуществили подключение к стороннему файлу «cop.php
».
Если поменять текст в файле «cop.php », то в файле «index.php » вы увидите замену.
Шаблон оператора Include :
Шаблон оператора Require :
Еще один пример для закрепления темы.
У нас есть вот такая веб-страница:
Все права защищены © 2012-2014..ru
Давайте теперь разобьем эту веб-страницу на два блока с помощью оператора Include или Require, как на схемке:
Это буде выглядеть вот так:
Сохраните ее под именами «index.php
», «avtor.php
» и «kontakty.php
»
То есть, получится три страницы «index.php
», «avtor.php
» и «kontakty.php
».
Теперь создайте файл «menu.php » для меню:
Главная Автор Контакты
Все права защищены © 2012-2014..ru
Результат:
Если поменять что-то в файле «cop.php » или «menu.php », то автоматически произойдет замена в трех файлах «index.php », «avtor.php » и «kontakty.php ». Попробуйте сами.
Вот и все! Подписывайтесь на обновление блога, чтобы не пропустить новых уроков PHP . Удачи!