TGViewer
Channel Public Channel
PHP | Вопросы собесов

PHP | Вопросы собесов

@easy_php_ru

Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Subscribers
2.3K
Photos
34
Videos
0
Links
1.6K

Showing posts older than #1856 · Back to latest

Older Posts 20 shown
Post #1854 467
🤔 В чем заключается Enterprise Service Bus (ESB)?

Это интеграционная архитектура, которая связывает разные сервисы и системы, обеспечивая обмен данными между ними.
Ключевые аспекты:
- Централизованное управление обменом сообщениями.
- Упрощение интеграции систем с разными форматами данных.
- Гибкость – можно легко добавлять и удалять сервисы.
- Масштабируемость – упрощает распределение нагрузки между сервисами.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #1853 485
🤔 Что такое инкапсуляция?

Инкапсуляция — это один из основных принципов ООП. Она представляет собой механизм, позволяющий скрыть внутренние детали объекта и предоставлять доступ к данным и методам объекта только через определенные интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта.

🚩Основные аспекты

🟠Сокрытие данных
Инкапсуляция позволяет скрыть внутреннее состояние объекта от внешнего мира. Данные объекта становятся доступными только через методы, предоставленные самим объектом.
🟠Контроль доступа
Внутренние данные и методы объекта могут быть объявлены как приватные (private) или защищенные (protected), что предотвращает их прямой доступ из кода вне объекта. Публичные методы (public) используются для взаимодействия с объектом.
🟠Целостность данных
Поскольку доступ к данным осуществляется через методы, можно контролировать и проверять изменения состояния объекта, что помогает поддерживать его целостность и корректность.

class User {
// Приватные свойства
private $name;
private $email;

// Конструктор для инициализации свойств
public function __construct($name, $email) {
$this->setName($name);
$this->setEmail($email);
}

// Публичный метод для получения имени
public function getName() {
return $this->name;
}

// Публичный метод для установки имени
public function setName($name) {
if (!empty($name)) {
$this->name = $name;
} else {
throw new Exception("Name cannot be empty");
}
}

// Публичный метод для получения email
public function getEmail() {
return $this->email;
}

// Публичный метод для установки email
public function setEmail($email) {
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$this->email = $email;
} else {
throw new Exception("Invalid email address");
}
}
}

// Создание объекта пользователя
$user = new User("John Doe", "john.doe@example.com");

// Получение и изменение данных через публичные методы
echo $user->getName(); // John Doe
$user->setEmail("new.email@example.com");
echo $user->getEmail(); // new.email@example.com

// Прямой доступ к приватным свойствам вызовет ошибку
// $user->name = "Jane"; // Ошибка


Ставь 👍 и забирай 📚 Базу знаний
Post #1852 470
🤔 Что такое анонимные функции?

Анонимные функции, также известные как замыкания, в PHP и других языках позволяют создавать функции без определенного имени. Эти функции можно использовать как значения переменных и передавать как аргументы другим функциям.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 2
Post #1851 497
🤔 Что такое ключи в БД?

Это специальные поля или комбинации полей, которые используются для идентификации записей и установления связей между таблицами. Ключи играют важную роль в обеспечении целостности и эффективности базы данных.

🚩Виды ключей

🟠Первичный ключ (Primary Key)
Это одно или несколько полей, которые однозначно идентифицируют каждую запись в таблице. Он должен быть уникальным и не содержать NULL-значений.
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);


🟠Внешний ключ (Foreign Key)
Это поле или набор полей в одной таблице, которое указывает на первичный ключ в другой таблице. Внешние ключи используются для установления и обеспечения целостности ссылок между таблицами.
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100)
);

CREATE TABLE enrollments (
enrollment_id INT PRIMARY KEY,
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);


🟠Кандидатный ключ (Candidate Key)
Это поле или комбинация полей, которое может служить уникальным идентификатором для записи в таблице. Таблица может иметь несколько кандидатных ключей, из которых один выбирается как первичный ключ.
CREATE TABLE users (
user_id INT,
email VARCHAR(100),
phone VARCHAR(20),
PRIMARY KEY (user_id),
UNIQUE (email),
UNIQUE (phone)
);


🟠Альтернативный ключ (Alternate Key)
Это любой кандидатный ключ, который не выбран в качестве первичного ключа. В примере выше email и phone являются альтернативными ключами, так как user_id выбран как первичный ключ.

🟠Составной ключ (Composite Key)
Это ключ, состоящий из двух или более полей, которые вместе уникально идентифицируют запись.
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id)
);


🟠Суррогатный ключ (Surrogate Key)
Это искусственно созданный ключ, который обычно представляет собой уникальный идентификатор, не имеющий смысла вне контекста базы данных.
CREATE TABLE employees (
employee_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(100)
);


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
  • 💊 1
Post #1850 447
🤔 Зачем нужны паттерны проектирования?

Паттерны проектирования решают типичные задачи разработки, предоставляя проверенные временем решения. Они повышают читаемость, повторное использование и масштабируемость кода.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #1849 502
🤔 Что такое транзакции?

Это последовательности операций с базой данных, которые рассматриваются как единое целое. Они обеспечивают целостность данных, гарантируя, что либо все операции в транзакции выполнены успешно, либо никакие изменения не будут применены, если произошла ошибка.

🟠Atomicity (Атомарность)
Гарантирует, что все операции в рамках транзакции будут выполнены полностью или не будут выполнены вовсе. Если любая из операций внутри транзакции не удалась, все изменения откатываются.
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;


🟠Consistency (Согласованность)
Обеспечивает перевод базы данных из одного согласованного состояния в другое. Транзакции должны оставлять базу данных в корректном состоянии, удовлетворяющем всем правилам и ограничениям.

🟠Isolation (Изолированность)
Обеспечивает изолированность транзакций друг от друга. Это означает, что результаты промежуточных операций одной транзакции невидимы для других транзакций до завершения первой транзакции.

🟠Durability (Долговечность)
Гарантирует, что изменения, внесённые успешно завершённой транзакцией, будут сохранены в базе данных даже в случае сбоя системы.

🚩Использования транзакций

🟠Перевод денег между счетами
Необходимо убедиться, что обе операции (списание и зачисление) выполнены успешно, чтобы избежать ситуации, когда деньги списаны, но не зачислены.
BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT; -- Если обе операции прошли успешно
-- ROLLBACK; -- Если произошла ошибка


🟠Создание заказа в интернет-магазине
Важно убедиться, что все связанные операции (добавление записи о заказе, обновление статуса товаров, запись данных о платеже) выполнены успешно.
BEGIN TRANSACTION;

INSERT INTO orders (user_id, order_date) VALUES (1, NOW());
UPDATE products SET stock = stock - 1 WHERE product_id = 101;
INSERT INTO payments (order_id, amount) VALUES (LAST_INSERT_ID(), 99.99);

COMMIT; -- Если все операции прошли успешно
-- ROLLBACK; -- Если произошла ошибка


Ставь 👍 и забирай 📚 Базу знаний
Post #1848 478
🤔 Имеет ли значение регистр заголовка?

Нет, не имеет.
В HTTP заголовки регистронезависимы.
Например, Content-Type, content-type, CONTENT-TYPE — это одно и то же.
Но значения заголовков могут быть чувствительны к регистру — зависит от конкретного поля.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 2
Post #1847 472
🤔 Что известно о MVC?

Это паттерн проектирования, широко используемый для создания структурированных и масштабируемых приложений. Он разделяет приложение на три основных компонента: Модель (Model), Представление (View) и Контроллер (Controller).

🚩Основные компоненты

🟠Модель (Model)
Модель отвечает за данные и бизнес-логику приложения. Она управляет доступом к данным, логикой их обработки и взаимодействием с базой данных. В приложении электронной коммерции модель будет содержать классы, представляющие продукты, пользователей и заказы, а также методы для работы с этими данными (например, добавление нового продукта, обработка заказа и т.д.).

🟠Представление (View)
Представление отвечает за отображение данных пользователю. Оно формирует пользовательский интерфейс на основе данных, предоставляемых моделью. Веб-страницы, отображающие список продуктов, форму регистрации или страницу заказа, являются примерами представлений.

🟠Контроллер (Controller)
Контроллер действует как посредник между моделью и представлением. Он обрабатывает входные данные от пользователя, взаимодействует с моделью для выполнения необходимых операций и выбирает соответствующее представление для отображения результата. Контроллер может обрабатывать запрос на добавление нового продукта, получать данные от модели и затем отображать обновленный список продуктов через представление.

🚩Примеры

Model
// app/Models/Product.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model {
protected $fillable = ['name', 'price', 'description'];
}


Controller
// app/Http/Controllers/ProductController.php
namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller {
public function index() {
$products = Product::all();
return view('products.index', compact('products'));
}

public function store(Request $request) {
Product::create($request->all());
return redirect()->route('products.index');
}
}


View
<!-- resources/views/products/index.blade.php -->
<!DOCTYPE html>
<html>
<head>
<title>Products</title>
</head>
<body>
<h1>Products</h1>
<ul>
@foreach($products as $product)
<li>{{ $product->name }} - ${{ $product->price }}</li>
@endforeach
</ul>
<form action="{{ route('products.store') }}" method="POST">
@csrf
<input type="text" name="name" placeholder="Product Name">
<input type="text" name="price" placeholder="Product Price">
<textarea name="description" placeholder="Product Description"></textarea>
<button type="submit">Add Product</button>
</form>
</body>
</html>


🚩Плюсы

➕Разделение обязанностей
Разделяет приложение на три компонента, каждый из которых отвечает за свою задачу. Это упрощает поддержку и масштабирование кода.

➕Улучшенная тестируемость
Разделение логики позволяет легко тестировать каждую часть приложения отдельно.

➕Гибкость и переиспользование
Компоненты MVC могут быть легко изменены или переиспользованы в других частях приложения или в других проектах.

➕Чистота и упорядоченность кода
Способствует созданию чистого и упорядоченного кода, что упрощает работу в команде и ускоряет разработку.

Ставь 👍 и забирай 📚 Базу знаний
Post #1846 488
🤔 Что такое DP (Dynamic Programming)?

1. Динамическое программирование — это метод оптимизации, используемый для решения задач, разбиваемых на подзадачи.
2. Результаты подзадач сохраняются и переиспользуются, чтобы избежать повторных вычислений.
3. Используется для задач оптимизации, например, нахождение кратчайшего пути, задачи Фибоначчи или задач на разбиение.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #1845 472
🤔 Что такое di container?

Это специальный инструмент или объект в программировании, который управляет созданием и внедрением зависимостей в объекты. Этот контейнер автоматически решает, какие зависимости требуются объекту, и предоставляет их при создании объекта, тем самым упрощая управление зависимостями в приложении.

🚩Зачем нужен DI-контейнер

🟠Автоматизация управления зависимостями
DI-контейнер автоматически создает и внедряет зависимости, избавляя от необходимости вручную передавать их в объекты.
🟠Гибкость и модульность
Позволяет легко заменять реализации зависимостей, не изменяя код, который их использует.
🟠Упрощение тестирования
Обеспечивает легкую замену зависимостей на моки или заглушки для тестирования.
🟠Улучшение структуры кода
Разделяет создание объектов и их использование, способствуя более чистой архитектуре.

🚩Как используется DI-контейнер

DI-контейнеры предоставляют различные методы для регистрации зависимостей и их последующего получения. Ниже приведен пример реализации простого DI-контейнера.

1⃣Создание интерфейсов и реализаций зависимостей
interface Logger {
public function log($message);
}

class FileLogger implements Logger {
public function log($message) {
echo "Logging message to a file: $message";
}
}

interface PaymentProcessor {
public function processPayment($amount);
}

class StripePaymentProcessor implements PaymentProcessor {
public function processPayment($amount) {
echo "Processing payment of $amount through Stripe";
}
}


2⃣Реализация DI-контейнера
class DIContainer {
private $bindings = [];

public function bind($abstract, $concrete) {
$this->bindings[$abstract] = $concrete;
}

public function resolve($abstract) {
if (!isset($this->bindings[$abstract])) {
throw new Exception("No binding found for $abstract");
}

$concrete = $this->bindings[$abstract];

// Если $concrete является замыканием, вызываем его
if ($concrete instanceof Closure) {
return $concrete($this);
}

// Создаем новый объект конкретного класса
return new $concrete;
}
}


3⃣Регистрация зависимостей и их использование
$container = new DIContainer();

// Регистрация зависимостей
$container->bind(Logger::class, FileLogger::class);
$container->bind(PaymentProcessor::class, function($container) {
return new StripePaymentProcessor();
});

// Получение зависимостей
$logger = $container->resolve(Logger::class);
$logger->log("This is a log message."); // Вывод: Logging message to a file: This is a log message.

$paymentProcessor = $container->resolve(PaymentProcessor::class);
$paymentProcessor->processPayment(100); // Вывод: Processing payment of 100 through Stripe


🚩Плюсы и минусы

➕Автоматизация
Снижает необходимость ручного создания и передачи зависимостей.
➕Гибкость
Легко изменять конкретные реализации зависимостей.
➕Тестируемость
Упрощает замену зависимостей на моки для тестирования.
➕Чистота кода
Упрощает код, делая его более модульным и читаемым.
➖Сложность настройки
Могут потребоваться значительные усилия для первоначальной настройки DI-контейнера.
➖Производительность
В некоторых случаях может снижать производительность из-за необходимости разрешения зависимостей.

Ставь 👍 и забирай 📚 Базу знаний
  • 🔥 2
Post #1844 494
🤔 Какое отличие у протоколов TCP и UDP?

- TCP — надёжный, ориентирован на соединение:
- Гарантирует доставку и порядок.
- Используется для HTTP, FTP, SSH и т.п.
- Медленнее из-за проверок, подтверждений, управления потоком.
- UDP — ненадёжный, без соединения:
- Быстрее, но без гарантии доставки и порядка.
- Используется для видео/аудио-стриминга, игр, DNS, VoIP.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #1843 527
🤔 Расскажи о Unit tests

Unit-тесты (или модульные тесты) — это тесты, которые проверяют работу отдельных модулей (функций, классов, методов) в коде. Они позволяют убедиться, что каждый компонент программы работает правильно в изоляции от других частей системы.

🚩Зачем нужны Unit-тесты?

🟠Раннее выявление ошибок
тесты помогают обнаружить баги сразу после написания кода.
🟠Упрощение рефакторинга
при изменении кода можно быстро проверить, не сломалось ли что-то.
🟠Уверенность в качестве кода
тесты показывают, что функции работают так, как задумано.
🟠Автоматизация тестирования
можно запускать тесты автоматически перед каждым релизом.
🟠Документирование кода
тесты помогают понять, как должна работать функция.

🚩Как писать Unit-тесты в PHP?

В PHP для написания тестов чаще всего используют PHPUnit – это популярный фреймворк для модульного тестирования.
Устанавливаем через Composer:
composer require --dev phpunit/phpunit


🚩Пример Unit-теста

Допустим, у нас есть функция в классе Calculator, которая складывает два числа
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}


Теперь создадим тест для проверки работы метода add
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase {
public function testAdd() {
$calc = new Calculator();
$result = $calc->add(2, 3);
$this->assertEquals(5, $result);
}
}


🚩Запуск тестов

Чтобы запустить тест, используем команду
vendor/bin/phpunit tests


Ставь 👍 и забирай 📚 Базу знаний
Post #1842 496
🤔 Как происходит процесс раскатки (разворачивания) деплоя?

Процесс деплоя включает развертывание кода на серверах. Это может быть автоматизировано с помощью скриптов, которые переносят код из репозитория на продуктивные сервера, настраивают зависимости, обновляют базы данных и перезапускают службы.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 🤔 4
Post #1841 581
🤔 Что такое нормализация, денормализация?

Это два подхода к проектированию структуры баз данных. Они используются для оптимизации хранения данных и повышения производительности запросов.

🚩Нормализация

Это процесс структурирования базы данных для уменьшения избыточности данных и устранения аномалий при обновлении, вставке или удалении данных.

🚩Цели нормализации

🟠Устранение дублирования данных
Это помогает экономить место и поддерживать согласованность данных.
🟠Повышение целостности данных
Например, если данные изменяются в одном месте, то изменения не нужно делать в других местах.

🚩Этапы нормализации

1⃣Первая нормальная форма (1NF)
Удаление повторяющихся групп и дублирующихся данных.
2⃣Вторая нормальная форма (2NF)
Устранение частичной зависимости данных от составного ключа.
3⃣Третья нормальная форма (3NF)
Устранение транзитивной зависимости (когда данные зависят не от первичного ключа напрямую, а через другие поля).
4⃣Далее
BCNF (нормальная форма Бойса-Кодда) и другие более сложные формы.

🚩Денормализация

Это процесс намеренного добавления избыточности данных для повышения производительности запросов.

🚩Цели денормализации

🟠Ускорение чтения данных
Объединение таблиц или добавление дублированных данных уменьшает количество соединений (JOIN) между таблицами.

SELECT o.OrderID, c.CustomerName, p.ProductName, p.ProductPrice
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
JOIN Products p ON o.ProductID = p.ProductID;


Ставь 👍 и забирай 📚 Базу знаний
Post #1840 522
🤔 Для чего нужен middleware?

Middleware — это промежуточный слой между запросом клиента и сервером, который обрабатывает запросы до их передачи конечному обработчику. Он используется для выполнения задач, таких как аутентификация, логирование, кэширование и обработка ошибок. Middleware помогает разделить логику приложения на независимые компоненты и улучшает масштабируемость и управляемость кода.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #1839 528
🤔 Что такое Rest?

Это архитектурный стиль для создания веб-сервисов, который был предложен Роем Филдингом в его докторской диссертации в 2000 году. В его основе лежит принцип использования стандартных HTTP методов (GET, POST, PUT, DELETE и др.) для взаимодействия с ресурсами, представленными в виде URL.

🚩Основные принципы

🟠Адресуемость (Addressability)
Каждому ресурсу (например, пользователю, товару) соответствует уникальный URL.

🟠Использование стандартных методов HTTP
Использует методы HTTP для выполнения операций с ресурсами.
GET: Получение данных.
POST: Создание нового ресурса.
PUT: Обновление существующего ресурса.
DELETE: Удаление ресурса.

🟠Статусность (Statelessness)
Каждый запрос к серверу должен содержать всю необходимую информацию для его обработки. Сервер не хранит информацию о состоянии клиента между запросами.

🟠Кэширование (Caching)
Ответы от сервера могут кэшироваться, чтобы улучшить производительность и снизить нагрузку на сервер.

🟠Единообразие интерфейса (Uniform Interface)
Все взаимодействия между клиентом и сервером стандартизированы, что упрощает интеграцию и взаимодействие между системами.

🚩Примеры

🟠Получение списка пользователей (GET)
Запрос
GET /users


Ответ
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]


🟠Получение информации о конкретном пользователе (GET)
Запрос
GET /users/1


Ответ
{
"id": 1,
"name": "Alice"
}


🟠Создание нового пользователя (POST)
Запрос
POST /users
Content-Type: application/json

{
"name": "Charlie"
}


Ответ (Успешное создание)
{
"id": 3,
"name": "Charlie"
}


🟠Обновление информации о пользователе (PUT)
Запрос
PUT /users/1
Content-Type: application/json

{
"name": "Alice Updated"
}


Ответ
{
"id": 1,
"name": "Alice Updated"
}


🟠Удаление пользователя (DELETE)
Запрос
DELETE /users/1


Ответ (Успешное удаление)
{
"message": "User deleted"
}


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 3
Post #1837 512
🤔 Что такое в мире PHP PSR и RFC?

PSR (PHP Standards Recommendations) — это набор стандартов и рекомендаций для написания кода в PHP, таких как PSR-1, PSR-2 для стиля кода, PSR-4 для автозагрузки классов. RFC (Request for Comments) — это предложения по улучшению PHP, которые обсуждаются и принимаются сообществом, формируя новые возможности и изменения в языке. Оба механизма способствуют стандартизации и улучшению качества кода в PHP-сообществе.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #1836 539
🤔 Что такое абстрактный класс?

Абстрактный класс — это класс в ООП, который не может быть инстанциирован напрямую, то есть нельзя создать объект абстрактного класса используя оператор new. Они предназначены для того, чтобы служить базой для других классов, которые должны реализовать определенные методы, заданные в нем. Обеспечение общего определения класса, которое может быть использовано в качестве основы для создания производных классов. Производные классы должны реализовать все абстрактные методы абстрактного родительского класса, но при этом они могут также иметь дополнительные методы и свойства или переопределять существующие.
abstract class Животное {
public function ест() {
echo "Это животное ест";
}

abstract public function издаетЗвук();
}

class Собака extends Животное {
public function издаетЗвук() {
echo "Гав";
}
}

// $животное = new Животное(); // Ошибка: нельзя инстанциировать абстрактный класс
$собака = new Собака();
$собака->ест(); // Вывод: Это животное ест
$собака->издаетЗвук(); // Вывод: Гав


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #1835 514
🤔 Что изменилось в приведении типов в PHP 8?

PHP 8 усилил строгую типизацию, добавив поддержку объединённых типов (Union Types). Также введены типы mixed и static, расширяющие возможности определения данных. Улучшена работа с привидением типов, исключая двусмысленности, чтобы снизить вероятность ошибок.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #1834 553
🤔 Где мы делаем фильтрацию данных?

Фильтрацию данных в PHP можно делать в нескольких местах в зависимости от контекста. Основные области фильтрации:

🚩Фильтрация входных данных

Когда мы получаем данные от пользователя ($_GET, $_POST, $_REQUEST), важно очищать их от нежелательных значений.
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);


Фильтрация массива $_POST через filter_var_array()
$filters = [
'name' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
'age' => FILTER_VALIDATE_INT
];
$filteredData = filter_var_array($_POST, $filters);


🚩Фильтрация перед сохранением в базу данных

Перед вставкой в SQL важно удалять потенциально опасные символы, чтобы избежать SQL-инъекций.
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
':name' => htmlspecialchars($_POST['name']),
':email' => $_POST['email']
]);


🚩Фильтрация данных внутри кода

Если данные поступают из разных источников, мы можем использовать фильтрующие функции PHP:

Очистка строки от HTML
$cleanText = strip_tags("<h1>Hello</h1>"); // "Hello"


Удаление пробелов
$trimmed = trim("   example   "); // "example"


Приведение к числу
$number = filter_var("42abc", FILTER_SANITIZE_NUMBER_INT); // 42


🚩Фильтрация перед выводом (защита от XSS)

Перед выводом в браузер очищаем данные от HTML/JS-кода, чтобы злоумышленник не внедрил скрипты.
echo htmlspecialchars("<script>alert('Hacked!')</script>"); 
// Выведет: &lt;script&gt;alert('Hacked!')&lt;/script&gt;


Ставь 👍 и забирай 📚 Базу знаний
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →