Введение
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
|
Проверка установки
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 и правильное использование его возможностей поможет создавать качественные и безопасные приложения.