Разработка PHP-страниц: основы и примеры

Раздел: PHP -> Веб-разработка на PHP

Создание веб-страницы на PHP

Основной подход: минимальная PHP-страница

Любая веб-страница на PHP представляет собой файл с расширением .php, содержащий HTML и встроенный PHP-код. Сервер интерпретирует PHP-блоки и отдаёт результат как чистый HTML.

<?php
echo "Hello, World!";
?>

Php веб сервисы (php веб-сервисы)

Результат: в браузере отобразится строка "Hello, World!". Этот код можно поместить в файл index.php и открыть через веб-сервер (Apache/Nginx с PHP).

Пояснение шагов:

  1. Открывающий тег <?php указывает серверу начать обработку PHP.
  2. Команда echo выводит текст.
  3. Закрывающий тег ?> возвращает управление HTML (не обязателен в конце файла).

Типичные проблемы и их решение

  • Проблема: пустая страница. Решение: включить отображение ошибок через error_reporting(E_ALL); ini_set('display_errors', 1);.
  • Проблема: синтаксическая ошибка (пропущена точка с запятой). Решение: проверить код на наличие синтаксических ошибок.

Как встроить PHP-код прямо в HTML-разметку?

PHP можно размещать внутри любого места HTML-документа. Пример:

<!DOCTYPE html>
<html>
<head><title>Пример</title></head>
<body>
  <h1><?php echo "Добро пожаловать"; ?></h1>
  <p>Сегодня <?php echo date('d.m.Y'); ?></p>
</body>
</html>

Php веб страница (веб-страница на php)

Результат: заголовок и дата будут динамическими. Для коротких выражений удобен сокращённый синтаксис <?= ... ?>, который эквивалентен <?php echo ... ?>.

Типичные ошибки

  • Забыт закрывающий тег ?> – после него весь остаток файла воспринимается как PHP и может вызвать ошибку.
  • Неправильное экранирование кавычек внутри echo – используйте одинарные кавычки или экранирование.

Как обработать данные, отправленные через HTML-форму?

Форма отправляет данные методами GET или POST. Пример обработчика process.php:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = htmlspecialchars($_POST['name']);
    echo "Привет, $name!";
}
?>
<form method="post">
  <input type="text" name="name">
  <button>Отправить</button>
</form>

Config app php (конфигурация php приложения)

Результат: после ввода имени и отправки формы появится приветствие. Функция htmlspecialchars предотвращает XSS-атаки.

Проблемы и решения

  • Не проверено существование ключа в массиве $_POST – выдаёт warning. Решение: использовать isset() или ??.
  • Данные не экранированы – уязвимость XSS. Решение: всегда использовать htmlspecialchars при выводе.

Как организовать код с помощью подключения внешних файлов?

Функции и конфигурацию выносят в отдельные файлы и подключают через include или require.

<?php
// config.php
$db_host = 'localhost';
$db_user = 'root';
?>
<?php
// index.php
include 'config.php';
echo "Подключение к $db_host";
?>

App php route (маршрутизация в php приложении)

Результат: переменная $db_host доступна в index.php.

Типичные ошибки

  • Неправильный путь к файлу – include выдаёт warning, но скрипт продолжает работу. Решение: использовать require для критичных файлов, проверять путь с __DIR__.
  • Повторное подключение – может вызвать переопределение функций. Решение: использовать include_once / require_once.

Как сохранять данные между запросами с помощью сессий?

Сессии позволяют хранить информацию о пользователе. Пример:

<?php
session_start();
if (!isset($_SESSION['count'])) {
    $_SESSION['count'] = 0;
}
$_SESSION['count']++;
echo "Вы посетили страницу {$_SESSION['count']} раз.";
?>

Default php app (настройки по умолчанию в php приложении)

Результат: при каждом обновлении страницы счётчик увеличивается.

Проблемы и решения

  • Ошибка "headers already sent" – session_start() должен вызываться до любого вывода (echo, HTML). Решение: разместить вызов в самом начале файла.
  • Сессия не сохраняется – проверить настройки cookie и права на папку для хранения сессий.

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

Современный способ – PDO (PHP Data Objects). Пример подключения и выборки:

<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$pdo = new PDO($dsn, 'root', '');
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['name'] . '<br>';
}
?>

App php domain (работа с доменами в php)

Результат: список имён из таблицы users.

Типичные проблемы

  • SQL-инъекции при использовании конкатенации в запросе. Решение: использовать подготовленные запросы (prepare и execute).
  • Ошибка подключения (неверный хост, логин). Решение: обернуть в try-catch и вывести сообщение об ошибке.

Как сделать простую шаблонизацию с помощью PHP?

Можно хранить HTML-шаблон с плейсхолдерами и заменять их.

<?php
// template.html
$template = file_get_contents('template.html');
$template = str_replace('{title}', 'Главная', $template);
$template = str_replace('{content}', 'Добро пожаловать!', $template);
echo $template;
?>

App path php (работа с путями файлов в php)

Или использовать прямое включение PHP в шаблон:

<?php
$title = 'О нас';
include 'layout.php';
?>

Где layout.php содержит HTML с <?= $title ?>.

Проблемы

  • Сложность поддержки при большом количестве плейсхолдеров. Решение: использовать готовые шаблонизаторы (Twig, Blade).
  • Опасность выполнения произвольного кода, если шаблон загружается из непроверенного источника.
- App controller php (создание контроллера в php приложении)
- App php link (создание ссылок в php приложении)
- создание скриптов php (создание скриптов php)

Расширенные примеры работы с PHP-страницами

Пример 1: Простой счётчик посещений на основе файла

Счётчик хранит количество посещений в текстовом файле. Код:

Пример
<?php
$counterFile = 'counter.txt';
if (!file_exists($counterFile)) {
    file_put_contents($counterFile, '0');
}
$count = (int)file_get_contents($counterFile);
$count++;
file_put_contents($counterFile, $count);
echo "Страница посещена $count раз.";
?>

Результат (после нескольких обновлений):

Страница посещена 5 раз.

Пример 2: Форма регистрации с валидацией и записью в БД

Файл register.php:

Пример
<?php
$error = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = trim($_POST['username'] ?? '');
    $email = trim($_POST['email'] ?? '');
    if (empty($username) || empty($email)) {
        $error = 'Заполните все поля.';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $error = 'Некорректный email.';
    } else {
        // Подключение к БД и вставка (используем подготовленный запрос)
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
        $stmt = $pdo->prepare('INSERT INTO users (username, email) VALUES (:username, :email)');
        $stmt->execute(['username' => $username, 'email' => $email]);
        echo 'Регистрация прошла успешно!';
        exit;
    }
}
?>
<form method="post">
  Имя: <input type="text" name="username" value="<?= htmlspecialchars($_POST['username'] ?? '') ?>"/><br>
  Email: <input type="email" name="email"/><br>
  <button>Зарегистрироваться</button>
</form>
<p style="color:red"><?= $error ?></p>

Результат при успешной регистрации:

Регистрация прошла успешно!

При незаполненном поле:

Заполните все поля.

Пример 3: Генерация JSON-списка пользователей из БД

Скрипт api/users.php возвращает JSON:

Пример
<?php
header('Content-Type: application/json');
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $stmt = $pdo->query('SELECT id, username, email FROM users');
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($users, JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
    echo json_encode(['error' => $e->getMessage()]);
}
?>

Результат (пример вывода):

[{"id":1,"username":"Иван","email":"ivan@example.com"},{"id":2,"username":"Мария","email":"maria@example.com"}]

Пример 4: Загрузка изображения на сервер и его отображение

Файл upload.php:

Пример
<?php
$uploadDir = 'uploads/';
$message = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
    $file = $_FILES['image'];
    $allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
    if (!in_array($file['type'], $allowedTypes)) {
        $message = 'Разрешены только JPEG, PNG, GIF.';
    } elseif ($file['error'] !== UPLOAD_ERR_OK) {
        $message = 'Ошибка загрузки: ' . $file['error'];
    } else {
        $dest = $uploadDir . uniqid() . '_' . basename($file['name']);
        if (move_uploaded_file($file['tmp_name'], $dest)) {
            $message = 'Файл загружен: <img src="' . htmlspecialchars($dest) . '" />';
        } else {
            $message = 'Не удалось сохранить файл.';
        }
    }
}
?>
<form method="post" enctype="multipart/form-data">
  <input type="file" name="image" accept="image/*" required/>
  <button>Загрузить</button>
</form>
<div><?= $message ?></div>

Результат после загрузки файла photo.jpg:

Файл загружен: <img src="uploads/64a1f2b3c4d5e_photo.jpg" />

Веб-страница на PHP - comments

En
Php веб страница (php)