Урок 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>&copy; <?= $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"; ?>

Проверяем

  1. Откройте http://localhost:8080 — главная страница
  2. Кликните на "О нас" — переход на about.php
  3. Кликните на "Контакты" — переход на contact.php

Обратите внимание: шапка и меню одинаковые на всех страницах, но хранятся в одном файле!

Преимущества такого подхода

  • DRY (Don't Repeat Yourself) — не повторяем код
  • Лёгкость изменений — меняете один файл, обновляются все страницы
  • Чистота — каждый файл отвечает за своё
Теперь вы умеете:
✅ Разделять код на файлы
✅ Подключать файлы через include/require
✅ Создавать переиспользуемые компоненты

Мы используем файлы cookie для улучшения работы сайта и персонализации контента. Продолжая использовать сайт, вы соглашаетесь с использованием cookies в соответствии с нашей Политикой конфиденциальности.