До этого момента мы писали сценарии для работы с базами данных, обработ
ки HTMLформ, сохранения cookie и многого другого, но все наши программы
состояли только из одного файла. Однако, как только мы начинаем разрабаты
вать сложные сайты, практика переписывания одних и тех же функций в каж
дом сценарии становится неэффективной. Поразмыслив, вы наверняка обна
ружите, что HTMLдизайн и PHPфункции используются на многих страницах
Webресурсов. Можно размножать эту общую информацию в каждом отдельном
сценарии, но, если вдруг возникнет необходимость внести какиелибо измене
ния, делать это придется во многих местах. Массу времени удастся сэкономить,
создав отдельные файлы для общего кода и включив их в PHPсценарии с по
мощью одной из двух инструкций: include () и require ( ) . Синтаксис при этом
будет выглядеть следующим образом:
include("file.php");
require ("£Це.рпр") ;
Обе команды работают почти одинаково, за исключением одного суще
ственного различия. Независимо от того, в каком месте сценария имеется ин
струкция require ( ) , ею всегда будет вставлен требуемый файл, даже если блок
кода, где она задана, в данный момент не работает. Функция include ( ) , наоборот,
включит код из файла, только если она действительно вызвана. Поэтому необ
ходимо использовать команду require ( ) , когда файл должен быть включен,
и include ( ) , если файл в зависимости от обстоятельств может быть включен
или нет.
Что делают эти команды? Каждая из них включает указанный файл в основ
ной (чтобы было более понятно, будем называть файл, который содержит
строку include ( ) или require ( ) , родительским файлом). Любой код внутри фай
ла будет трактоваться как обычный код HTML, если он не находится внутри
PHPскобок в самом включенном файле. Любые переменные, имеющиеся в ро
дительском документе до вызова команд include () или require ( ) , доступны
включенному файлу, и любые переменные из включенного файла будут доступ
ны родительскому документу после вызова этих функций.
Включаемые файлы стоит использовать по нескольким причинам. Можно
поместить свои собственные функции в общий файл. Удобно также хранить
информацию доступа к базе данных в едином конфигурационном файле. Для
начала поместим наш HTMLдизайн во включаемые файлы, чтобы он мог быть
использован в нескольких страницах.
Выполнение действия
- Создайте новый PHPдокумент в текстовом редакторе.
- Используйте для печати заголовка страницы код, представленный ниже.
- Закончите HTMLзаголовок.
- Создайте таблицу, которая будет управлять разбивкой страницы.
- Сохраните сценарий как header.php (листинг 13.1) и загрузите его на Web
сервер. - Создайте новый PHPдокумент в текстовом редакторе.
- Закройте вторую строку таблицы разбивки страницы.
- Напишите код для последней, третьей строки таблицы, которая будет со
держать информацию об авторском праве. - Закройте таблицу и HTMLстраницу.
- Сохраните сценарий как footer.php (листинг 13.2) и загрузите его на сер
вер. Как только два включаемых файла готовы, можно приступать к созда
нию родительских страниц. - Создайте новый PHPдокумент в текстовом редакторе.
- Присвойте имя страницы переменной $PageTitle.
- Включите файл заголовка.
- Создайте содержимое страницы.
- Включите файл нижнего колонтитула и закройте страницу.
- Сохраните страницу как index.php (листинг 13.3) и загрузите ее на сервер.
- Создайте новый PHPдокумент в текстовом редакторе.
- Сохраните сценарий как page2.php (листинг 13.4), загрузите его на сервер
и протестируйте вместе с файлом index.php в браузере (рис. 13.113.3).
Листинг 13.4 т Это еще один родительский файл, во многом идентичный
сценарию, данному в листинге 13.3. Независимо от количества страниц на ва
шем сайте всеми ими может быть использован этот базовый шаблон.
<HTML>
<HEAD>
<TITLE>
Хотя перед нами файл с расширением .php, в нем только один РНРраздел,
поэтому напишем большую часть кода как стандартный HTMLсценарий во
избежание использования многочисленных инструкций print ( ) .
<?php
print ("$PageTitle");
?>
Значение переменной $PageTitle будет присвоено в родительском докумен
те и затем использовано здесь для заголовка страницы, который выводится на
экран в самом верху окна браузера (рис. 13.1).
</TITLE>
</HEAD>
<BODY>
<TABLE WIDTH="75%" ALIGN=CENTER BORDER=0>
<TRxTD ALIGN=CENTERxB>Welcome to the Site!</Bx/TDxTR>
<TRxTD ALIGN=LEFTxP>
Сайт выглядит как таблица из трех строк. Верхняя строка будет включать
приветствие, хотя можно использовать и графику. Во второй строке поместим
собственно содержание страницы, а на третьей показан нижний колонтитул.
Мы используем первый включаемый файл для заголовка страницы, а также для
верхней и начала второй строки таблицы.
Листинг 13.1 т Это первый включаемый файл, который содержит HTML
заголовок, а также начало таблицы. Поскольку каждая страница имеет свой за
головок, используется переменная, печатающая соответствующие значения.
1 <HTML>
2 <HEAD>
3 <TITLE>
4 < ?php
5 print ("$PageTitle");
6 ?>
7 </TITLE>
8 </HEAD>
9 <BODY>
10 <TABLE WIDTH="75411 ALIGN»CENTER BORDER=0>
11 <TRxTD ALIGN=CENTERxB>Welcome to the SiteK/Bx/TDxTR>
12 <TRxTD ALIGN=LEFTxP>
Напишем второй включаемый файл для нижнего колонтитула.
<Px/TDx/TR>
<TRxTD ALIGN=CENTERxSMALL>Copyright 2001</SMALLx/TDx/TR>
</TABLE>
</BODY>
</HTML>
Листинг 13.2 т Это второй включаемый файл, который завершит создание
таблицы и закончит HTMLстраницу. Здесь также представлена информация
об авторском праве.
1 <Px/TDx/TR>
2 <TRxTD ALIGNCENTERxSMALL>Copyriaht 2001</SMALLx/TDx/TR>
3 </TABLE>
4 </BODY>
5 </HTML>
<?php
$PageTitle = "Home Page";
Значение переменной $PageTitle используется для создания заголовка
страницы, который будет размещен в верхней части окна браузера. Так как за
головки страниц различаются между собой, оформим их как переменную, ис
пользуемую включаемым файлом.
require ("header.php");
В этом случае не имеет значения, какая из двух функций применяется, но
мы использовали require ( ) для того, чтобы гарантировать включение. Данная
строка поместит весь код файла header.php в эту страницу. Строка должна сто
ять в сценарии после того, как переменной $PageTitle присвоено значение,
иначе страница не будет иметь заголовка.
print ("Content for the home page goes here.n");
,. print ("<P>Click <A target="_blank" href="page2.php">
here</A> to goto the next page.Xn");
Сюда включено только простое сообщение и ссылка на вторую страницу. Вы
можете поместить любое содержание, включая то, которое динамически гене
рируется РНР.
require ("footer.php");
Листинг 13.3 т Как только вы создали два включаемых файла, команда
require ( ) помещает их в родительский файл для создания всей страницы «на
лету».
1 < ?php
2 $PageTitle = "Home Page";
3 require ("header.php");
4 print ("Content for the home page goes here.n");
5 print ("<P>Click <A target="_blank" href="page2 .php">here</A>
to go to the next page.n");
6 require ("footer.php");
7 ?>
А теперь напишем вторую страницу, где будут использоваться включаемые
файлы, содержащие тот же дизайн сайта.
<?php
$PageTitle = "Second Page";
require ("header.php");
print ("Content for the second page goes here.n");
require ("footer.php");
Чтобы отличать эту страницу от файла index.php, мы присвоили перемен
ной $PageTitle новое значение, а затем изменили инструкцию print ( ) .
1 <?php
2 $PageTitle = "Second Page";
3 require ("header.php");
4 print ("Content for the second page goes here.n");
5 require ("footer.php");
6 ?>
Желательно использовать расширение .php, а не ,inc, которое некоторые програм
мисты применяют для включаемых файлов. Хотя для родительского файла РНР это
не имеет значения, ловкий пользователь иногда может посмотреть исходный текст
файла .inc, а вкладываемого файла .php нет (рис. 13.4 и 13.5).