Пост

PHP для начинающих: основы серверного программирования

Подробное руководство по PHP для начинающих. Изучите основы PHP, работу с базами данных, создание API и лучшие практики серверного программирования.

PHP для начинающих: основы серверного программирования

Введение

PHP - это популярный язык программирования для создания веб-приложений. В этой статье мы рассмотрим основы PHP и научимся создавать серверные приложения.

Что такое PHP?

  • Серверный язык: Выполняется на сервере
  • Встроенный в HTML: Легкая интеграция
  • Большая экосистема: Множество фреймворков и библиотек
  • Широкая поддержка: Работает на большинстве серверов

Начало работы

1. Установка и настройка

Установка PHP

1
2
3
4
5
6
7
8
9
# Windows (XAMPP)
# Скачайте и установите XAMPP с официального сайта

# Linux (Ubuntu)
sudo apt update
sudo apt install php php-cli php-fpm php-mysql php-zip php-gd php-mbstring php-curl php-xml php-bcmath

# macOS (Homebrew)
brew install php

Проверка установки

1
php -v

2. Первая программа

Hello World

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

Встроенный в HTML

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
    <title>Моя первая страница</title>
</head>
<body>
    <h1><?php echo "Привет, мир!"; ?></h1>
    <p>Текущее время: <?php echo date('H:i:s'); ?></p>
</body>
</html>

Основы PHP

1. Переменные и типы данных

Объявление переменных

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// Строки
$name = "John";
$message = 'Привет, мир!';

// Числа
$age = 25;
$price = 19.99;

// Булевы значения
$isActive = true;
$isAdmin = false;

// Массивы
$fruits = ["яблоко", "банан", "апельсин"];
$user = [
    "name" => "John",
    "age" => 25,
    "email" => "john@example.com"
];

// Null
$empty = null;
?>

2. Операторы

Математические операторы

1
2
3
4
5
6
7
8
9
10
<?php
$a = 10;
$b = 5;

$sum = $a + $b;      // Сложение
$diff = $a - $b;     // Вычитание
$product = $a * $b;  // Умножение
$quotient = $a / $b; // Деление
$remainder = $a % $b; // Остаток от деления
?>

Операторы сравнения

1
2
3
4
5
6
7
8
9
10
<?php
$a = 10;
$b = 5;

$equal = $a == $b;      // Равно
$identical = $a === $b; // Идентично
$notEqual = $a != $b;   // Не равно
$greater = $a > $b;     // Больше
$less = $a < $b;        // Меньше
?>

Управление потоком

1. Условные операторы

if-else

1
2
3
4
5
6
7
8
9
10
11
<?php
$age = 18;

if ($age >= 18) {
    echo "Вы совершеннолетний";
} elseif ($age >= 14) {
    echo "Вы подросток";
} else {
    echo "Вы ребенок";
}
?>

switch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$day = "понедельник";

switch ($day) {
    case "понедельник":
        echo "Первый день недели";
        break;
    case "вторник":
        echo "Второй день недели";
        break;
    default:
        echo "Другой день недели";
}
?>

2. Циклы

for

1
2
3
4
5
<?php
for ($i = 0; $i < 5; $i++) {
    echo "Итерация: $i\n";
}
?>

while

1
2
3
4
5
6
7
<?php
$i = 0;
while ($i < 5) {
    echo "Итерация: $i\n";
    $i++;
}
?>

foreach

1
2
3
4
5
6
7
8
9
10
11
<?php
$fruits = ["яблоко", "банан", "апельсин"];
foreach ($fruits as $fruit) {
    echo "$fruit\n";
}

// С ключами
foreach ($fruits as $key => $fruit) {
    echo "$key: $fruit\n";
}
?>

Функции

1. Определение функций

Простая функция

1
2
3
4
5
6
7
<?php
function greet($name) {
    return "Привет, $name!";
}

echo greet("John"); // Выведет: Привет, John!
?>

Функция с параметрами по умолчанию

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function createUser($name, $age = 18, $email = null) {
    return [
        "name" => $name,
        "age" => $age,
        "email" => $email
    ];
}

$user1 = createUser("John"); // age = 18, email = null
$user2 = createUser("Jane", 25, "jane@example.com");
?>

Работа с базами данных

1. MySQL

Подключение к базе данных

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$host = "localhost";
$dbname = "mydatabase";
$username = "root";
$password = "";

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo "Ошибка подключения: " . $e->getMessage();
}
?>

Выполнение запросов

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// Вставка данных
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(["John", "john@example.com"]);

// Получение данных
$stmt = $pdo->query("SELECT * FROM users");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Обновление данных
$stmt = $pdo->prepare("UPDATE users SET name = ? WHERE id = ?");
$stmt->execute(["Jane", 1]);
?>

Работа с файлами

1. Чтение и запись файлов

Чтение файла

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// Чтение всего файла
$content = file_get_contents("file.txt");

// Чтение построчно
$lines = file("file.txt");

// Открытие файла
$handle = fopen("file.txt", "r");
while (($line = fgets($handle)) !== false) {
    echo $line;
}
fclose($handle);
?>

Запись в файл

1
2
3
4
5
6
7
8
9
10
11
12
<?php
// Запись в файл
file_put_contents("file.txt", "Новый контент");

// Добавление в файл
file_put_contents("file.txt", "Дополнительный контент", FILE_APPEND);

// Открытие файла для записи
$handle = fopen("file.txt", "w");
fwrite($handle, "Новый контент");
fclose($handle);
?>

Создание API

1. REST API

Простой API endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
header('Content-Type: application/json');

// Получение данных
$data = json_decode(file_get_contents('php://input'), true);

// Обработка запроса
switch ($_SERVER['REQUEST_METHOD']) {
    case 'GET':
        echo json_encode([
            "status" => "success",
            "data" => ["message" => "Hello from API"]
        ]);
        break;
        
    case 'POST':
        echo json_encode([
            "status" => "success",
            "data" => $data
        ]);
        break;
        
    default:
        http_response_code(405);
        echo json_encode([
            "status" => "error",
            "message" => "Method not allowed"
        ]);
}
?>

2. Аутентификация

JWT токены

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
require_once 'vendor/autoload.php';
use \Firebase\JWT\JWT;

function generateToken($user) {
    $key = "your-secret-key";
    $payload = [
        "user_id" => $user['id'],
        "exp" => time() + (60 * 60) // 1 час
    ];
    
    return JWT::encode($payload, $key, 'HS256');
}

function validateToken($token) {
    $key = "your-secret-key";
    try {
        return JWT::decode($token, $key, ['HS256']);
    } catch(Exception $e) {
        return false;
    }
}
?>

Обработка форм

1. Создание формы

HTML форма

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
    <title>Форма регистрации</title>
</head>
<body>
    <form method="POST" action="process.php">
        <div>
            <label>Имя:</label>
            <input type="text" name="name" required>
        </div>
        <div>
            <label>Email:</label>
            <input type="email" name="email" required>
        </div>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

Обработка формы

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
    
    if ($name && $email) {
        // Сохранение данных
        echo "Данные успешно сохранены";
    } else {
        echo "Ошибка валидации";
    }
}
?>

Безопасность

1. Защита от SQL-инъекций

Использование подготовленных запросов

1
2
3
4
5
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$user = $stmt->fetch();
?>

2. XSS защита

Экранирование вывода

1
2
3
4
5
6
7
8
<?php
function escape($string) {
    return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}

$userInput = "<script>alert('xss')</script>";
echo escape($userInput);
?>

Заключение

PHP - это мощный язык для создания веб-приложений. Понимание основ PHP и правильное использование его возможностей поможет создавать качественные и безопасные приложения.

Авторский пост защищен лицензией CC BY 4.0 .

© Oleg Dobrynin. Некоторые права защищены.