Конструкции включений в PHP. Управляющие конструкции Не работает include и require
Конструкция включений 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"
;
// Работает
?>
Часто приходится хранить всякие везде-используемые данные/функции в отдельных файлах, и потом подключать, используя include[_once]/require[_once]. Но эти файлы обычно не парсятся сервером, то есть, их можно смотреть через браузер, этого мы и хотим избежать. Давать таким файлам расширение PHP не очень правильно, так как их можно вызвать через браузер, и, хотя мы и не увидим содержимое, но, наверняка, у нас начнут вылазить какие-либо ошибки , так как код внутри файлов обычно рассчитан на исполнение в определенном окружении (наличие коннекта к базе чтение файлов/определенные значения констант/переменных). Есть 2 выхода по сути похожих:
- поместить все INC файлы за пределами DOCUMENT_ROOT Apache
- написать (.htaccess), чтобы запретить доступ ко всем файлам с определенными расширениями
Пример
# запретить скачивание файлов с указанными расширениямиrequire
Загружает и вставляет код в PHP скрипт. Если такого файла, кода нет в наличии, прекращается дальнейшая работа всего PHP скрипта. В случае если будет вызываться такая же инструкция в том же скрипте, то будет либо ошибка либо игнорирование загрузки файла - то есть будет тупо возвращена пустота.
PHP функций и наработанных библиотек.
Варианты вызова:
require "файл"; // такой мне больше нравится, четче видно require("файл");include
Загружает и вставляет код в PHP скрипт. Если такого файла, кода нет в наличии, то основной PHP скрипт переходит к выполнению кода после оператора include. В случае, если файл уже был ранее загружен то он загрузится повторно. Нельзя использовать для загрузки одних и тех модулей с функциями, будет ошибка.
Используется в основном для загрузки HTML вставок в страницы.
Варианты вызова:
include "файл"; // такой мне больше нравится, четче видно include ("файл");Существуют также еще функции require_once и include_once , приставка once означает загрузку данных в PHP скрипт только один раз. Если такая функция встретится два раза в одном скрипте, то код будет выполнен только у первого этапа, все остальные будут проигнорированы, тем самым увеличив скорость выполнения скрипта.
Одна из самых занимательных и полезных возможностей php - подключение другого файла. Например, на сайте есть верхнее меню, нижнее и между ними само содержание страницы. И, например, на 10 страницах сайта используется нижнее меню. В какой-то момент в него потребовалось внести изменения. В html Вы бы вручную в каждом отдельном файле вносили изменения, но php позволяет существенно упростить работу с сайтом! Код нижнего меню может содержаться в отдельном файле, а на каждой из 10-ти страниц можно просто подключать этот отдельный файл! То есть все изменения нужно теперь вносить только в файл с меню, а на 10-ти других оно будет отображаться уже с изменениями.Смысл подключения в php простым русским языком:
Файл 1.php
Верхнее меню
Файл 2.php
Нижнее меню
Файл example.php
Подкючаем Файл 1.php
Содержание страницы
Подкючаем Файл 2.php
В результате проработки файла example.php будет отображено
Верхнее меню
Содержание страницы
Нижнее меню
Соответственно, чтобы что-либо изменить в нижнем меню, нужно внести изменения только в файле 2.php
Путь к файлу
Подключение файла происходит согласно указанному к файлу пути. Есть два варианта пути: относительный и абсолютный. Относительный - это указание пути к подлючаемому файлу относительно файла с инструкцией подключения. Абсолютный - указание полного пути к подключаемому файла.Код PHP
// пример относительного пути
include "include/ваш_файл.php"; // файл лежит в папке include, которая находится в той же директории, что и файл с подключением
// пример абсолютного пути
include $_SERVER["DOCUMENT_ROOT"]."/include/ваш_файл.php"; // $_SERVER["DOCUMENT_ROOT"] - указывает корневую директорию сайта
include и include_once
include() - конструкция, предназначенная для включения файлов в код сценария PHP во время исполнения сценария PHP. При обработке кода инструкция заменяется на содержимое присоединяемого файла. Предлагаю сразу рассмотреть пример.Рассмотрим работу include на примере двух файлов: index.php и text.php . Для простоты работы допустим, что они лежат в одной директории.
Код PHP (файл index.php )
Echo "Обычный текст, содержащийся в основном файле";
include "text.php"; // подключаем содержимое файла text.php
?>
Код PHP
(файл text.php
)
Echo "Текст, содержащийся в подключаемом файле";
?>
В результате работы файла index.php отобразится:
Обычный текст, содержащийся в основном файле
Текст, содержащийся в подключаемом файле
Правда удобно? Теперь, поменяв содержимое в файле text.php будет совершенно другой результат работы index.php!
Теперь поговорим о другой конструкции - include_once . Она работает абсолютно также как и include, только создана позже и для тех случаев, когда нельзя повторно подключить файл. Например, Вы боитесь, что в результате ошибки можете подключить файл 2 и более раз, что скажется на некорректной работе страницы и получении соответствующего сообщения об ошибке.
Код PHP
Include_once "text.php"; // файл text.php будет подключен только один раз
// повторное подключения ниже не будет учтено и отображено
// и из-за него не будет выведено сообщение об ошибке
include_once "text.php"; // ничего не произойдёт
require и require_once
Инструкции require и require_once работают идентично include и include_once за исключением лишь одной особенности - в случае того, если подключаемый файл не будет найден, выполнение скрипта будет остановлено (сценарий дальше не будет считываться), в то время как include и include_once просто выводят предупреждение и продолжают дальнейшее выполнение скрипта.Если не работает include или require
Чтобы понять причины того, почему не работает include, предлагаю проверить всё по шагам. Какими бы понятными и поверхностными не были указанные ниже пункты, проверьте всё с самого начала1.
Проверьте, работает ли Ваш сервер и php, работает ли вообще любой php код на сайте
2.
Убедитесь, существует ли файл подключаемый файл
3.
Проверьте, правильно ли введено название файла и расширение в подключении
4.
Убедитесь, что подключаемый php-файл действительно находится по тому адресу, по которому указали
5.
Попробуйте указать не относительный путь, а абсолютный (полный путь к файлу).
Пример Код PHP
Include "http://www.example.com/include/ваш_файл.php";
// DOCUMENT_ROOT - обозначает корневую директорию ресурса
include $_SERVER["DOCUMENT_ROOT"]."/include/ваш_файл.php";
6. Если у Вас не подключается файл и не отображается никакой ошибки, то в директории с файлом, который подключаете, создайте файл .htaccess со следующим содержимым
Php_flag display_errors On
или в файле php
, перед подключением, вставьте следующую строку
Error_reporting(E_ALL);
И та, и другая настройки будут принудительно отображать ошибки
Спасибо за внимание!
оператор . Включение может производиться любым из перечисленных способов:include "имя_файла"; include $file_name; include ("имя_файла");
Пример 3.9 . Пусть в файле params.inc у нас хранится набор каких-то параметров и функций. Каждый раз, когда нам нужно будет использовать эти параметры (функции), мы будем вставлять в текст нашей основной программы команду include ("params.inc") .
Params.inc include.php "; // выведет "Привет, Вася!" echo "Сегодня $today"; // выведет, например, "Сегодня 7.07.05" ?> Пример 3.9. Использование оператора включения include
Заметим, что использование оператора include эквивалентно простой вставке содержательной части файла params.inc в код программы include.php . Может быть, тогда можно было в params.inc записать простой текст без всяких тегов, указывающих на то, что это php-код? Нельзя! Дело в том, что в момент вставки файла происходит переключение из режима обработки PHP в режим HTML. Поэтому код внутри включаемого файла, который нужно обработать как PHP-скрипт , должен быть заключен в соответствующие теги.
Поиск файла для вставки происходит по следующим правилам.
- Сначала ведется поиск файла в include_path относительно текущей рабочей директории.
- Если файл не найден, то поиск производится в include_path относительно директории текущего скрипта.
- Параметр include_path , определяемый в файле настроек PHP, задает имена директорий, в которых нужно искать включаемые файлы .
Например, ваш include_path это . (то есть текущая директория ), текущая рабочая директория это /www/ . В основной файл include.php вы включаете файл my_dir/a.php , который в свою очередь включает b.php . Тогда парсер первым делом ищет файл b.php в директории /www/ , и если такового нет, то в директории /www/my_dir/ .
Если файл включен с помощью include , то содержащийся в нем код наследует область видимости переменных строки, где появился include . Любые переменные вызванного файла будут доступны в вызывающем файле с этой строки и далее. Соответственно, если include появляется внутри функции вызывающего файла, то код, содержащийся в вызываемом файле, будет вести себя так, как будто он был определен внутри функции. Таким образом, он унаследует область видимости этой функции. Хотя мы и не знакомились еще с понятием функции, все же приводим здесь эти сведения в расчете на интуитивное его понимание.
Пример 3.10 . Пусть файл для вставки params.inc останется таким же, а include.php будет следующим:
"; $str .= "Страницу создал $user"; echo "$str"; } Footer(); // вызываем функцию Footer(). Получим: //Сегодня: 08.07.05 //Страницу создал Вася echo "$user, $today"; // выведет запятую, так как // эти переменные видны только // внутри функции?> Пример 3.10. Область видимости при использовани include
Кроме локальных файлов, с помощью include можно включать и внешние файлы, указывая их url-адреса. Данная возможность контролируется директивой url_fopen_wrappers в файле настроек PHP и по умолчанию, как правило, включена. Но в версиях PHP для Windows до PHP 4.3.0 эта возможность не поддерживается совсем, вне зависимости от url_fopen_wrappers .
include() – это специальная языковая конструкция, поэтому при использовании внутри условных блоков ее нужно заключать в фигурные скобки.
Пример 3.11. Использование include()
При использовании include возможны два вида ошибок – ошибка вставки (например, нельзя найти указанный файл, неверно написана сама команда вставки и т.п.) или ошибка исполнения (если ошибка содержится во вставляемом файле). В любом случае при ошибке в команде
Для чего нужно использовать в файлах 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 . Удачи!