Скрипт PHP страницы - основы и продвинутые приёмы

Раздел: Работа с файлами -> Включение скриптов

Основной метод: модульное включение через include

Наиболее эффективным решением для построения страницы из повторяющихся блоков является использование конструкции include. Этот подход позволяет подключать внешние файлы с HTML и PHP кодом, обеспечивая модульность, переиспользование и упрощение поддержки.

Пример базовой структуры: файл header.php содержит открывающие теги <html>, <head> и меню; файл footer.php – закрывающие теги и подвал. Основная страница подключает их в нужном порядке.


<?php
// index.php
include 'header.php';
echo '<h1>Главная страница</h1>';
include 'footer.php';
?>

скрипт php страницы (скрипт страницы на php)

Пояснение:

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

Как вставить общий заголовок на все страницы?

Для этого применяется include файла с шапкой сайта. В каждом файле страницы пишется include 'header.php';


// about.php
include 'header.php';
echo '<p>Страница О нас</p>';
include 'footer.php';

Как гарантировать выполнение обязательного скрипта (например, конфигурации)?

Используется require. Отличие от include – при ошибке (файл не найден) скрипт завершается с фатальной ошибкой. Это критично для файлов, без которых страница не может работать.


<?php
require 'config.php'; // подключение настроек базы данных
// далее код, зависящий от config.php
?>

Проблема:

Если путь к файлу указан неверно, require вызывает фатальную ошибку Fatal error: require(): Failed opening required. Решение – использовать абсолютные пути через __DIR__:


require __DIR__ . '/config.php';

Также следует проверять существование файла с помощью file_exists().

Как избежать повторного включения одного и того же файла?

Используются include_once и require_once. Они проверяют, был ли файл уже включён, и не включают его повторно. Это важно для файлов с функциями или классами, чтобы избежать ошибки "Cannot redeclare function".


include_once 'functions.php';
include_once 'functions.php'; // второй раз не выполнится

Как изменить порядок вывода при включении скриптов?

Для управления буферизацией вывода используется пара ob_start() и ob_get_clean(). Это позволяет захватить вывод в переменную, обработать его и затем вывести.


<?php
ob_start();
include 'template.php';
$content = ob_get_clean();
$content = str_replace('{title}', 'Новый заголовок', $content);
echo $content;
?>

Такой приём применяется при работе с шаблонизаторами.

Как включить файл, который возвращает данные (например, конфигурацию)?

PHP позволяет файлам возвращать значение с помощью return. При включении такого файла конструкция include возвращает это значение.


// config.php
<?php
return [
    'host' => 'localhost',
    'user' => 'root'
];
?>

// index.php
$config = include 'config.php';
echo $config['host']; // выведет localhost

Это безопаснее использования глобальных переменных.

Как динамически подключать разные скрипты в зависимости от параметра?

Условное включение выполняется с помощью if-else или switch. Например, выбор страницы по GET-параметру.


$page = $_GET['page'] ?? 'home';
switch ($page) {
    case 'about':
        include 'about.php';
        break;
    default:
        include 'home.php';
}

Проблема:

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

Расширенные примеры включения скриптов

Пример 1. Шаблон с буферизацией и заменой плейсхолдеров

Использование ob_start() и str_replace для создания гибкого шаблона.

Пример

<?php
// template.php
?>
<!DOCTYPE html>
<html>
<head><title>{title}</title></head>
<body>
{content}
</body>
</html>

// index.php
$data = ['title' => 'Мой сайт', 'content' => '<p>Привет!</p>'];
ob_start();
include 'template.php';
$html = ob_get_clean();
foreach ($data as $key => $val) {
    $html = str_replace('{'.$key.'}', $val, $html);
}
echo $html;
<!DOCTYPE html>
<html>
<head><title>Мой сайт</title></head>
<body>
<p>Привет!</p>
</body>
</html>

Пояснение: шаблон содержит плейсхолдеры {title} и {content}, которые заменяются на реальные данные.

Пример 2. Конфигурационный файл, возвращающий массив

Модульное хранение настроек с возвратом данных через return.

Пример

// db.php
<?php
return ['dsn' => 'mysql:host=localhost;dbname=test', 'user' => 'root', 'pass' => ''];
?>

// app.php
$db = include 'db.php';
$db['charset'] = 'utf8';
echo json_encode($db);
{"dsn":"mysql:host=localhost;dbname=test","user":"root","pass":"","charset":"utf8"}

Пояснение: вызванный include возвращает массив, который затем дополняется.

Пример 3. Автозагрузка классов через spl_autoload_register

Автоматическое подключение файлов с классами.

Пример

<?php
spl_autoload_register(function ($class) {
    $file = __DIR__ . '/classes/' . $class . '.php';
    if (file_exists($file)) {
        require $file;
    }
});
$obj = new MyClass();
$obj->doSomething();
?>
(вывод зависит от реализации метода doSomething)

Пояснение: при создании объекта MyClass PHP автоматически вызывает зарегистрированную функцию, которая подключает соответствующий файл.

Пример 4. Обработка ошибок при включении с проверкой существования файла

Предотвращение фатальных ошибок с помощью file_exists().

Пример

$file = 'non_existent.php';
if (file_exists($file)) {
    include $file;
} else {
    error_log("File $file not found");
    include 'default.php';
}
(если файл не существует, в лог записывается ошибка, и подключается default.php)

Пояснение: такой подход даёт контроль над исключительными ситуациями.

Пример 5. Массовое подключение модулей из папки с помощью glob

Автоматическое включение всех PHP файлов из заданной директории.

Пример

$files = glob(__DIR__ . '/modules/*.php');
foreach ($files as $module) {
    require $module;
}
(все файлы из папки modules загружаются; если в них есть код, он выполняется)

Пояснение: glob возвращает массив путей, затем каждый файл подключается через require.

Скрипт страницы на PHP - comments

En
скрипт php страницы (php)