PHP | Вопросы собесов – Telegram
PHP | Вопросы собесов
2.44K subscribers
30 photos
1.06K links
Download Telegram
Forwarded from Идущий к IT
🔥 Записал видос "Как за 3 минуты настроить Автоотклики на вакансии HeadHunter" больше не придется заниматься этой унылой рутиной

📺 Видео: https://youtu.be/G_FOwEGPwlw
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое интерфейсы?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какие протоколы ты знаешь?

Протоколы в сетевых системах обеспечивают правила передачи данных. Они работают на разных уровнях модели OSI и TCP/IP. Вот основные виды протоколов:

🚩Основные виды протоколов

🟠Физический и канальный уровни
Ethernet: Передача данных по проводным сетям.
Wi-Fi (IEEE 802.11): Беспроводная передача данных.
PPP (Point-to-Point Protocol): Соединение между двумя узлами.
HDLC (High-Level Data Link Control): Передача данных на канальном уровне.

🟠Сетевой уровень
IP (Internet Protocol): Основной протокол для передачи данных в интернете (IPv4 и IPv6).
ICMP (Internet Control Message Protocol): Передача сообщений об ошибках и контроля.

🟠Транспортный уровень
TCP (Transmission Control Protocol): Надежная передача данных.
UDP (User Datagram Protocol): Быстрая, но ненадежная передача данных.

🟠Сеансовый и представительный уровни
SSL/TLS (Secure Sockets Layer / Transport Layer Security): Обеспечение безопасности передачи данных.
NetBIOS: Работа сетевых приложений в локальных сетях.

🟠Прикладной уровень
HTTP/HTTPS (HyperText Transfer Protocol / Secure): Передача веб-страниц.
FTP (File Transfer Protocol): Передача файлов.
SMTP (Simple Mail Transfer Protocol): Передача электронной почты.
POP3/IMAP: Получение электронной почты.
DNS (Domain Name System): Преобразование доменных имен в IP-адреса.
SSH (Secure Shell): Безопасное удаленное управление серверами.
SNMP (Simple Network Management Protocol): Управление сетевыми устройствами.
LDAP (Lightweight Directory Access Protocol): Доступ и управление каталогами.
DHCP (Dynamic Host Configuration Protocol): Динамическое назначение IP-адресов.

🟠Специализированные протоколы
VoIP (Voice over IP): Передача голосовых данных (SIP, RTP).
MQTT (Message Queuing Telemetry Transport): Обмен сообщениями в IoT.
CoAP (Constrained Application Protocol): Работа с ограниченными устройствами в IoT.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое чистая архитектура?

Это принцип построения ПО, который отделяет бизнес-логику от деталей реализации.
Ключевые принципы:
- Разделение слоев – отделение логики от UI и базы данных.
- Независимость от фреймворков – можно менять базу данных или API без переписывания логики.
- Устойчивость к изменениям – легче поддерживать и тестировать код.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какое отличие у протоколов tcp и udp?

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

🚩Основные отличия

🟠Надежность
TCP: Обеспечивает надежную передачу данных. Он использует механизмы установления соединения, подтверждение получения (ACK), контроль потерь пакетов, повторную передачу потерянных пакетов и контроль потока. Это гарантирует, что данные будут доставлены корректно и в правильном порядке.
UDP: Не обеспечивает надежную передачу данных. Нет подтверждений получения, нет повторной передачи потерянных пакетов и нет контроля потока. Это делает передачу менее надежной, но более быстрой и с меньшими накладными расходами.

🟠Установление соединения
TCP: Перед началом передачи данных устанавливается соединение с помощью процедуры "трехстороннего рукопожатия" (three-way handshake). Это означает, что обе стороны сначала обмениваются сигналами SYN и ACK для установления соединения.
UDP: Не требует установления соединения. Пакеты (датаграммы) просто отправляются к получателю без предварительного установления соединения.

🟠Порядок доставки
TCP: Обеспечивает доставку данных в правильном порядке. Если пакеты приходят в неправильном порядке, TCP собирает их в правильном порядке перед передачей приложению.
UDP: Не гарантирует порядок доставки. Пакеты могут приходить в произвольном порядке, и приложение должно обрабатывать их соответствующим образом, если это необходимо.

🟠Пропускная способность и задержки
TCP: Из-за механизмов контроля потока и подтверждений имеет большие накладные расходы и, следовательно, может быть медленнее. Это особенно заметно на сетях с высокой задержкой или потерей пакетов.
UDP: Из-за отсутствия контроля потока и подтверждений имеет меньшие накладные расходы, что может привести к меньшим задержкам и большей пропускной способности. Подходит для приложений, где важна скорость, а не надежность.

🟠Применение
TCP: Используется для приложений, где важна надежность и порядок передачи данных, таких как веб-браузеры (HTTP/HTTPS), электронная почта (SMTP, IMAP, POP3), файловые передачи (FTP), удаленный доступ (SSH).
UDP: Используется для приложений, где важна скорость и где потеря некоторых пакетов не критична, таких как потоковое видео и аудио (VoIP, IPTV), онлайн-игры, службы доменных имен (DNS).

🚩Примеры использования

TCP
HTTP/HTTPS: Веб-серфинг
SMTP: Отправка электронной почты
IMAP/POP3: Получение электронной почты
FTP: Передача файлов
SSH: Безопасный удаленный доступ


UDP
DNS: Запросы доменных имен
VoIP: Передача голоса через IP
IPTV: Потоковое видео
Онлайн-игры: Быстрая передача данных игровой логики
NTP: Синхронизация времени


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Как расшифровывается REST?

REST (Representational State Transfer) — это архитектурный стиль взаимодействия систем через HTTP. Он основан на представлении ресурсов как URL и использовании стандартных HTTP-методов (GET, POST, PUT, DELETE) для работы с этими ресурсами.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
🤔 В чем отличие адаптера от декоратора?

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

🚩Адаптер (Adapter)

Преобразовать интерфейс одного класса в интерфейс другого класса, который ожидают клиенты. Адаптер позволяет классам с несовместимыми интерфейсами работать вместе.
Адаптер реализует интерфейс, который должен быть представлен клиенту, и перенаправляет вызовы клиента к объекту с другим интерфейсом. Важно, что адаптер изменяет интерфейс взаимодействия, но не добавляет новую функциональность.

Вы разрабатываете приложение, которое должно использовать существующую библиотеку классов, интерфейсы которой не совместимы с остальной частью вашего приложения. Создав адаптер для этих классов, вы можете интегрировать библиотеку без изменения её кода или кода приложения.

🚩Декоратор (Decorator)

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

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

🚩Отличия

🟠Цель применения
Адаптер используется для обеспечения совместимости между различными интерфейсами, позволяя объектам с несовместимыми интерфейсами работать вместе. Декоратор добавляет новую функциональность объектам, не изменяя их интерфейсы.

🟠Изменение интерфейса
Адаптер изменяет интерфейс объекта для совместимости с другим интерфейсом. Декоратор не изменяет интерфейс, но добавляет новое поведение, сохраняя при этом оригинальный интерфейс объекта.

🟠Добавление функциональности
Декораторы предназначены для добавления новой функциональности объектам. Адаптеры не добавляют новую функциональность; их основная задача — обеспечить работу существующей функциональности через другой интерфейс.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Как посчитать функцию, если внутри неё много различных действий?

Алгоритм анализируется путём определения сложности каждого действия и их комбинирования. Итоговая сложность определяется доминирующим элементом.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3👍1💊1
🤔 Зачем нужен шаблон Builder?

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

🚩Зачем нужен Builder?

🟠Упрощает создание сложных объектов
Когда объект имеет много параметров, особенно опциональных (например, дом с разными опциями — бассейном, гаражом, садом).

🟠Избегает перегруженных конструкторов
Вместо того чтобы передавать кучу аргументов в конструктор (new Car("red", 4, true, "diesel")), мы можем строить объект постепенно.

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

🚩Пример использования в PHP

Допустим, мы строим объект Car (Машина).
Проблема без Builder'а (длинный конструктор)
class Car {
public string $color;
public int $wheels;
public bool $sunroof;
public string $engine;

public function __construct(string $color, int $wheels, bool $sunroof, string $engine) {
$this->color = $color;
$this->wheels = $wheels;
$this->sunroof = $sunroof;
$this->engine = $engine;
}
}

$car = new Car("red", 4, true, "diesel"); // Что значат true и 4? Непонятно.


Решение с использованием Builder
class Car {
public string $color;
public int $wheels;
public bool $sunroof;
public string $engine;

private function __construct() {} // Закрываем прямой доступ к конструктору

public static function builder(): CarBuilder {
return new CarBuilder();
}
}

class CarBuilder {
private Car $car;

public function __construct() {
$this->car = new Car();
}

public function setColor(string $color): self {
$this->car->color = $color;
return $this;
}

public function setWheels(int $wheels): self {
$this->car->wheels = $wheels;
return $this;
}

public function setSunroof(bool $sunroof): self {
$this->car->sunroof = $sunroof;
return $this;
}

public function setEngine(string $engine): self {
$this->car->engine = $engine;
return $this;
}

public function build(): Car {
return $this->car;
}
}

// Использование
$car = Car::builder()
->setColor("red")
->setWheels(4)
->setSunroof(true)
->setEngine("diesel")
->build();

var_dump($car);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊3
🤔 Что такое инкремент и декремент?

Инкремент (`++`) и декремент (`--`) — это операции в PHP и других языках программирования, которые увеличивают или уменьшают значение переменной на единицу соответственно.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Расскажи о 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


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какая разница между self и this?

self в PHP используется для обращения к текущему классу, включая статические методы и свойства, тогда как this ссылается на конкретный экземпляр класса. self подходит для работы с общими (статическими) членами класса, а this — для доступа к данным объекта. self не может использоваться для динамических данных объекта, в отличие от this.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какие виды уязвимости знаешь?

В веб-разработке существует множество уязвимостей, но самые распространенные
SQL-инъекции (SQL Injection)
Межсайтовый скриптинг (XSS – Cross-Site Scripting)
Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery)
Ошибки аутентификации и управления сессиями
Необработанные пользовательские данные
Доступ к файлам и директориям (LFI/RFI – Local/Remote File Inclusion)
Ошибки конфигурации сервера и утечки данных

🟠SQL-инъекции (SQL Injection)
Атака, при которой злоумышленник вставляет вредоносный SQL-код в запрос, получая доступ к БД.
Чтение / изменение данных
Удаление таблиц
Получение паролей пользователей
Используем подготовленные запросы (Prepared Statements)
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute([':email' => $_POST['email']]);
$user = $stmt->fetch();


🟠Межсайтовый скриптинг (XSS – Cross-Site Scripting)
Атака, при которой злоумышленник вставляет вредоносный JavaScript в веб-страницу.
Кража cookies и сеансов
Изменение содержимого страницы
Фишинг
Очистка данных перед выводом
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');


🟠Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery)
Злоумышленник заставляет пользователя выполнить нежелательный запрос от его имени (например, перевести деньги).
Изменение данных без ведома пользователя
Подмена учетных записей
Используем CSRF-токены
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));


При отправке формы проверяем
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF атака!");
}


🟠Ошибки аутентификации и управления сессиями
Если пароли хранятся неправильно или сессии уязвимы, злоумышленник может перехватить учетную запись пользователя.
Кража пароля
Перехват сессии
Храним пароли с password_hash(), а не в открытом виде:
$hash = password_hash("mypassword", PASSWORD_BCRYPT);


🟠Необработанные пользовательские данные
Приложение принимает и использует входные данные без проверки.
Возможность загрузки вредоносных файлов
Выполнение вредоносного кода
Проверяем загружаемые файлы (MIME-тип, расширение)
Используем валидацию данных:
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);


🟠Доступ к файлам и директориям (LFI/RFI)
Злоумышленник может загружать и выполнять опасные файлы через параметры в URL.
Выполнение кода на сервере
Чтение конфиденциальных файлов
Запрещаем прямую загрузку файлов:
$whitelist = ['jpg', 'png', 'gif'];
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, $whitelist)) {
die("Недопустимый файл!");
}


🟠Ошибки конфигурации сервера и утечки данных
Если сервер настроен неправильно, можно случайно раскрыть важные данные.
Вывод ошибок PHP в браузере
Доступ к файлам .env, config.php
Отключаем display_errors в php.ini:
display_errors = Off


Защищаем файлы .env через .htaccess

  <Files .env>
Order allow,deny
Deny from all
</Files>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что содержит инкапсуляция кроме сокрытия данных?

1. Контроль доступа: использование модификаторов public, protected, private для ограничения доступа.
2. Инкапсуляция логики: методы класса предоставляют контролируемый интерфейс для работы с данными.
3. Сохранение целостности: защита данных от некорректных изменений извне.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чём суть абстрактного класса?

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

abstract class ТранспортноеCредство {
protected $скорость;

public function установитьСкорость($скорость) {
$this->скорость = $скорость;
}

abstract public function двигаться();
}

class Автомобиль extends ТранспортноеCредство {
public function двигаться() {
echo "Движется на скорости: " . $this->скорость . " км/ч";
}
}

// $транспорт = new ТранспортноеCредство(); // Ошибка: не может быть инстанциирован
$автомобиль = new Автомобиль();
$автомобиль->установитьСкорость(60);
$автомобиль->двигаться();


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 По какому принципу объединяются и разделяются методы в интерфейсах?

Методы в интерфейсах группируются по роли или контракту, то есть:
- Каждый интерфейс должен описывать конкретное поведение (например, Serializable, Renderable).
- Принцип разделения интерфейса (Interface Segregation Principle, SOLID) — лучше несколько небольших интерфейсов, чем один громоздкий.
- Интерфейс отражает намерение: что объект умеет делать, а не как он это делает.
Это упрощает поддержку, повторное использование и тестирование кода.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое списочный тип?

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

🚩Особенности

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

🟠Изменяемость
Списки обычно являются изменяемыми структурами данных, что означает, что вы можете добавлять, удалять или изменять элементы после создания списка.

🟠Гетерогенность
В списке могут храниться элементы различных типов данных (например, числа, строки, объекты).

🚩Примеры списочных типов в различных языках программирования

Python
  my_list = [1, 2, 3, 'a', 'b', 'c']
my_list.append(4) # Добавление элемента
print(my_list[2]) # Доступ к элементу по индексу (вывод: 3)


Java
  import java.util.ArrayList;

ArrayList<Object> myList = new ArrayList<>();
myList.add(1);
myList.add("hello");
System.out.println(myList.get(1)); // Доступ к элементу по индексу (вывод: hello)


PHP
  $myList = array(1, 2, 3, 'a', 'b', 'c');
array_push($myList, 4); // Добавление элемента
echo $myList[2]; // Доступ к элементу по индексу (вывод: 3)


🚩Плюсы

Гибкость
Списки позволяют легко добавлять, удалять и изменять элементы.
Удобство использования
Простейшие операции над списками, такие как добавление или удаление элементов, обычно реализуются стандартными методами или функциями.
Поддержка индексов
Доступ к элементам по индексу позволяет эффективно манипулировать данными.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какой принцип нарушает Active Record?

Active Record нарушает принцип единственной ответственности (SRP) из SOLID.
1. В Active Record бизнес-логика и операции работы с базой данных объединены в одном классе.
2. Это усложняет поддержку, тестирование и расширение кода.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
🤔 Что такое поведение copy on right.?

Это метод оптимизации памяти, используемый для увеличения эффективности. Когда несколько процессов или потоки обращаются к одному и тому же ресурсу (например, области памяти), создаётся одна копия ресурса, которая используется совместно до момента изменения. Если процесс хочет изменить ресурс, создаётся его собственная копия, чтобы сохранить изоляцию изменений. Пример: массив передаётся функции. Пока он не изменяется, память общая. При изменении создаётся отдельная копия массива. Применяется в PHP для управления объектами, массивами и значениями, особенно после версии PHP 5.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3💊3👍1
🤔 Какие известны распространенные способы кодирования в разработке?

1. Base64: для передачи бинарных данных в текстовом формате.
2. URL Encoding: преобразование специальных символов в безопасный формат для URL.
3. ASCII и Unicode: для кодировки символов.
4. JSON и XML: для структурирования данных.
5. UTF-8: стандарт кодировки текста.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔1
🤔 Где мы делаем фильтрацию данных?

Фильтрацию данных в 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("<noscript>alert('Hacked!')</noscript>"); 
// Выведет: &lt;noscript&gt;alert('Hacked!')&lt;/noscript&gt;


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1