Образцы 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 должны храниться безопасно.