Образцы PHP скриптов: от простого к сложному

Раздел: Обучение PHP -> Программирование на PHP

Создание PHP файла: основные принципы и примеры

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

Базовый пример PHP файла

Как выглядит простейший PHP файл?

<?php
echo "Привет, мир!";
?>

Файл начинается с открывающего тега <?php и заканчивается ?>. Код внутри выполняется на сервере. В данном случае выводится строка. Сохраните файл с именем index.php и поместите в веб-сервер.

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

  • Пропуск точки с запятой в конце оператора. Решение: всегда завершать операторы символом ;.
  • Использование коротких тегов (<?) без соответствующей настройки short_open_tag. Лучше использовать полный тег <?php.
  • Ошибки кодировки. Файл должен быть сохранен в кодировке UTF-8 без BOM.

Вариант 1: Встраивание PHP в HTML

Как создать PHP файл, который генерирует HTML страницу?

<!DOCTYPE html>
<html>
<head><title>Пример</title></head>
<body>
<h1>Текущее время: <?php echo date('H:i:s'); ?></h1>
</body>
</html>

PHP код вставляется прямо в HTML. Важно соблюдать синтаксис. Альтернативный вариант: <?= date('H:i:s') ?> для вывода.

Проблема: синтаксическая ошибка из-за неправильного закрытия тега или пропущенной точки с запятой. Решение: использовать <?= для echo.

Вариант 2: Обработка формы

Как создать PHP файл для обработки данных формы?

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = htmlspecialchars($_POST['name']);
    echo "Привет, $name!";
}
?>
<form method="post">
  Имя: <input type="text" name="name">
  <input type="submit">
</form>

Проверяется метод запроса, данные получаются из суперглобального массива $_POST. Для защиты от XSS используется htmlspecialchars.

Ошибка: Warning: Undefined array key "name". Решение: проверять существование через isset($_POST['name']) или использовать оператор null coalescing.

Вариант 3: Подключение к базе данных MySQL

Как создать PHP файл, который подключается к базе данных и выполняет запрос?

<?php
$host = 'localhost';
$dbname = 'test';
$user = 'root';
$pass = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $pdo->query('SELECT * FROM users');
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['name'] . '<br>';
    }
} catch (PDOException $e) {
    echo 'Ошибка: ' . $e->getMessage();
}
?>

Используется PDO для безопасного подключения. Важно настроить кодировку и режим ошибок.

Проблема: ошибка подключения (неверные параметры, отсутствие драйвера). Решение: проверить параметры, установить расширение pdo_mysql.

Вариант 4: Создание JSON API

Как создать PHP файл, который возвращает данные в формате JSON?

<?php
header('Content-Type: application/json; charset=utf-8');
$data = ['status' => 'ok', 'message' => 'Пример ответа'];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>

Устанавливается заголовок Content-Type, массив преобразуется в JSON. Параметр JSON_UNESCAPED_UNICODE сохраняет кириллицу.

Ошибка: вывод лишнего пробела или HTML до заголовка. Решение: убедиться, что файл не содержит пробелов перед <?php.

Вариант 5: Загрузка файла на сервер

Как создать PHP файл, который принимает и сохраняет загруженный файл?

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $uploadDir = __DIR__ . '/uploads/';
    if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);
    $filename = basename($_FILES['file']['name']);
    $target = $uploadDir . $filename;
    if (move_uploaded_file($_FILES['file']['tmp_name'], $target)) {
        echo 'Файл загружен: ' . $filename;
    } else {
        echo 'Ошибка загрузки';
    }
}
?>
<form method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit">
</form>

Проверяется наличие файла, создаётся директория, файл перемещается из временной папки. Используется basename для безопасности.

Проблема: ошибка прав доступа к папке. Решение: проверить права на запись для каталога uploads.

Вариант 6: Работа с сессиями

Как создать PHP файл для управления пользовательскими сессиями?

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

Сессия стартует с session_start(), данные хранятся на сервере. Используется для аутентификации и отслеживания.

Проблема: заголовки уже отправлены. Решение: вызывать session_start() до любого вывода.

Расширенные примеры PHP файлов

Пример 1: Полноценное CRUD приложение с SQLite

Пример
<?php
// index.php - управление пользователями
$db = new SQLite3('users.db');
$db->exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)');

// Добавление пользователя
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $stmt = $db->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
    $stmt->bindValue(':name', $name, SQLITE3_TEXT);
    $stmt->bindValue(':email', $email, SQLITE3_TEXT);
    $stmt->execute();
}

// Удаление
if (isset($_GET['delete'])) {
    $id = (int)$_GET['delete'];
    $db->exec("DELETE FROM users WHERE id = $id");
}
?>
<!DOCTYPE html>
<html><head><title>CRUD пример</title></head><body>
<h3>Список пользователей</h3>
<ul>
<?php
$result = $db->query('SELECT * FROM users');
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
    echo "<li>{$row['name']} ({$row['email']}) <a href='?delete={$row['id']}'>Удалить</a></li>";
}
?>
</ul>
<form method="post">
    Имя: <input type="text" name="name" required>
    Email: <input type="email" name="email" required>
    <input type="submit" name="add" value="Добавить">
</form>
</body></html>
Результат: HTML страница с формой и списком, данные берутся из SQLite. При добавлении или удалении запись обновляется.

Пример 2: Генерация PDF с помощью библиотеки FPDF

Пример
<?php
require 'fpdf.php';

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(40, 10, 'Привет, мир!');
$pdf->Output();
?>
Результат: Браузер отобразит PDF файл с текстом, если установлены соответствующие заголовки. Файл fpdf.php должен быть доступен.

Пример 3: Асинхронный запрос к API через cURL

Пример
<?php
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => 'https://api.example.com/data',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json']
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200) {
    $data = json_decode($response, true);
    echo 'Получено записей: ' . count($data);
} else {
    echo 'Ошибка HTTP: ' . $httpCode;
}
?>
Результат: Выводится количество записей, если ответ успешен. В случае ошибки выводится код.

Пример 4: Многопоточность через pcntl_fork (только Linux)

Пример
<?php
$pid = pcntl_fork();
if ($pid == -1) {
    die('Ошибка forks');
} elseif ($pid) {
    // Родительский процесс
    pcntl_wait($status);
    echo 'Родитель завершён';
} else {
    // Дочерний процесс
    echo 'Дочерний процесс PID: ' . getmypid();
    exit(0);
}
?>
Результат: На экран выводится сообщение от дочернего процесса, затем от родительского. Расширение pcntl должно быть установлено.

Пример 5: Шифрование данных с использованием openssl

Пример
<?php
$data = 'Секретное сообщение';
$method = 'aes-256-cbc';
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$encrypted = openssl_encrypt($data, $method, $key, 0, $iv);
echo 'Зашифровано: ' . base64_encode($encrypted);
$decrypted = openssl_decrypt($encrypted, $method, $key, 0, $iv);
echo '<br>Расшифровано: ' . $decrypted;
?>
Результат: Выводится строка в base64 и расшифрованный оригинал. Ключ и IV должны храниться безопасно.

Пример файла PHP - comments

En
Php файл пример (php)