Урок 10
Работа с несколькими файлами
20 минЗачем нужно несколько файлов?
Представьте блог с 10 страницами. На каждой странице:
- Одинаковая шапка сайта
- Одинаковое меню
- Одинаковый футер (подвал)
Если хранить всё в одном файле на каждой странице, то при изменении меню придётся редактировать 10 файлов!
Решение: выносим повторяющиеся части в отдельные файлы и подключаем их.
Структура проекта
Создайте такую структуру в папке public:
public/
├── index.php ← главная страница
├── about.php ← страница "О нас"
├── contact.php ← страница "Контакты"
└── includes/ ← общие части
├── header.php ← шапка
├── footer.php ← футер
└── config.php ← настройки
Создаём файлы
includes/config.php
Файл с общими настройками:
<?php
// Настройки сайта
$site_name = "Мой блог";
$site_description = "Блог о веб-разработке";
$current_year = date("Y");
// Позже здесь будет подключение к базе данных
?>
includes/header.php
Шапка сайта (начало HTML, меню):
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= $page_title ?? $site_name ?></title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: -apple-system, BlinkMacSystemFont, sans-serif;
line-height: 1.6;
color: #333;
}
header {
background: #F36049;
color: white;
padding: 20px 0;
}
.container {
max-width: 1000px;
margin: 0 auto;
padding: 0 20px;
}
header h1 { margin-bottom: 10px; }
nav a {
color: white;
text-decoration: none;
margin-right: 20px;
}
nav a:hover { text-decoration: underline; }
main { padding: 40px 0; min-height: 400px; }
</style>
</head>
<body>
<header>
<div class="container">
<h1><?= $site_name ?></h1>
<nav>
<a href="index.php">Главная</a>
<a href="about.php">О нас</a>
<a href="contact.php">Контакты</a>
</nav>
</div>
</header>
<main>
<div class="container">
includes/footer.php
Подвал сайта (конец HTML):
</div>
</main>
<footer style="background: #333; color: white; padding: 20px 0; text-align: center;">
<div class="container">
<p>© <?= $current_year ?> <?= $site_name ?>. Все права защищены.</p>
</div>
</footer>
</body>
</html>
Подключение файлов: include и require
PHP имеет несколько команд для подключения файлов:
| Команда | Если файл не найден | При повторном вызове |
|---|---|---|
include |
Предупреждение, скрипт продолжает работу | Подключает снова |
require |
Ошибка, скрипт останавливается | Подключает снова |
include_once |
Предупреждение | Не подключает повторно |
require_once |
Ошибка | Не подключает повторно |
Когда что использовать:
-
-
-
require_once — для критичных файлов (config, подключение к БД)-
include — для шаблонов (header, footer)
Главная страница: index.php
<?php
// Подключаем настройки (обязательно!)
require_once "includes/config.php";
// Заголовок страницы
$page_title = "Главная — $site_name";
// Подключаем шапку
include "includes/header.php";
?>
<h2>Добро пожаловать!</h2>
<p><?= $site_description ?></p>
<h3>Последние посты</h3>
<?php
$posts = [
["title" => "Привет, мир!", "date" => "2024-01-15"],
["title" => "Второй пост", "date" => "2024-01-16"],
];
foreach ($posts as $post):
?>
<article style="background: #f9f9f9; padding: 15px; margin: 15px 0; border-radius: 8px;">
<h4><?= $post["title"] ?></h4>
<small><?= $post["date"] ?></small>
</article>
<?php endforeach; ?>
<?php
// Подключаем подвал
include "includes/footer.php";
?>
Страница "О нас": about.php
<?php
require_once "includes/config.php";
$page_title = "О нас — $site_name";
include "includes/header.php";
?>
<h2>О нас</h2>
<p>Мы — команда разработчиков, которые любят делиться знаниями.</p>
<p>Этот блог создан для обучения PHP.</p>
<?php include "includes/footer.php"; ?>
Страница "Контакты": contact.php
<?php
require_once "includes/config.php";
$page_title = "Контакты — $site_name";
include "includes/header.php";
?>
<h2>Контакты</h2>
<p>Email: info@example.com</p>
<p>Телефон: +7 (999) 123-45-67</p>
<?php include "includes/footer.php"; ?>
Проверяем
- Откройте
http://localhost:8080— главная страница - Кликните на "О нас" — переход на about.php
- Кликните на "Контакты" — переход на contact.php
Обратите внимание: шапка и меню одинаковые на всех страницах, но хранятся в одном файле!
Преимущества такого подхода
- DRY (Don't Repeat Yourself) — не повторяем код
- Лёгкость изменений — меняете один файл, обновляются все страницы
- Чистота — каждый файл отвечает за своё
Теперь вы умеете:
✅ Разделять код на файлы
✅ Подключать файлы через include/require
✅ Создавать переиспользуемые компоненты
✅ Разделять код на файлы
✅ Подключать файлы через include/require
✅ Создавать переиспользуемые компоненты
Материалы по теме
- Глоссарий digital-терминов Глоссарий
- Статьи блога по разработке и SEO Блог
- Практические чеклисты по внедрению Чеклисты