FAQ Портал
Категории
Поиск
О нас
Контакты
UK
RU
EN
Главная
Технологии
Программирование
PHP
PHP
100 вопросов
Как установить PHP на Windows?
•
Скачайте PHP с php.net (Thread Safe для Apache).
•
Распакуйте в C:\php.
•
Переименуйте php.ini-development в php.ini.
•
Добавьте C:\php в PATH.
•
Перезапустите терминал, проверьте: php -v.
•
Альтернатива: XAMPP или Laragon.
Как установить PHP на Mac?
•
Homebrew: brew install php.
•
Проверьте: php -v.
•
Конфигурация: php --ini.
•
Для разных версий: brew install php@8.2.
•
Переключение: brew link php@8.2.
Как установить PHP на Linux?
•
Ubuntu/Debian: sudo apt install php.
•
С модулями: sudo apt install php-mysql php-mbstring php-xml.
•
CentOS: sudo yum install php.
•
Проверка: php -v.
•
Конфигурация: /etc/php/8.x/.
Что такое php.ini?
•
Главный файл конфигурации PHP.
•
Расположение: php --ini.
•
Основные настройки: memory_limit, upload_max_filesize.
•
display_errors для разработки.
•
Перезапустите веб-сервер после изменений.
Как запустить PHP скрипт?
•
Командная строка: php script.php.
•
Встроенный сервер: php -S localhost:
8000.
•
Через Apache/Nginx.
•
Интерактивный режим: php -a.
•
Выполнить код: php -r 'echo "Hello";'.
Какие типы данных в PHP?
•
Скалярные: bool, int, float, string.
•
Составные: array, object, callable, iterable.
•
Специальные: resource, NULL.
•
PHP — слабо типизированный.
•
Type hints для строгости.
Чем отличаются == от ===?
•
== нестрогое сравнение с приведением типов.
•
'5' == 5 вернёт true.
•
=== строгое сравнение значения И типа.
•
'5' === 5 вернёт false.
•
Рекомендуется использовать ===.
Чем отличаются require и include?
•
include — Warning при ошибке, скрипт продолжается.
•
require — Fatal Error, скрипт останавливается.
•
include_once/require_once — подключают только один раз.
•
require для критичных файлов.
•
include для опциональных.
Что такое переменные в PHP?
•
Начинаются с $.
•
Регистрозависимые: $name !== $Name.
•
Не требуют объявления типа.
•
Могут менять тип динамически.
•
Глобальные: $GLOBALS, $_GET, $_POST.
Что такое константы в PHP?
•
define('NAME', 'value') — старый способ.
•
const NAME = 'value' — современный.
•
Не начинаются с $.
•
Нельзя изменить после определения.
•
Константы классов: Class::CONST.
Как работают условия if/else?
•
if (условие) { код }.
•
elseif для дополнительных условий.
•
else для остального.
•
Тернарный: $x = $a ? $b : $c.
•
Null coalescing: $x = $a ?? 'default'.
Какие циклы есть в PHP?
•
for ($i = 0; $i < 10; $i++).
•
while (условие).
•
do...while — минимум 1 итерация.
•
foreach ($arr as $key => $val).
•
break — выход, continue — следующая итерация.
Как объявить функцию?
•
function name($param) { return $result; }.
•
Значения по умолчанию: function f($x = 10).
•
Type hints: function f(int $x): string.
•
Анонимные: $fn = function() {}.
•
Стрелочные: fn($x) => $x * 2.
Что такое область видимости переменных?
•
Локальные — внутри функции.
•
Глобальные — вне функций.
•
global $var — доступ к глобальной.
•
static — сохраняет значение между вызовами.
•
$GLOBALS['var'] — альтернатива global.
Как работать со строками?
•
Одинарные кавычки: 'текст'.
•
Двойные кавычки: "$var внутри".
•
Heredoc: <<<EOT многострочный EOT;.
•
Конкатенация: $a . $b.
•
Функции: strlen(), substr(), strpos().
Как работать с массивами?
•
Индексированный: [1, 2, 3].
•
Ассоциативный: ['key' => 'value'].
•
Многомерный: массив массивов.
•
Функции: count(), array_push(), array_merge().
•
Сортировка: sort(), asort(), ksort().
Что такое суперглобальные переменные?
•
$_GET — параметры URL.
•
$_POST — данные формы.
•
$_SESSION — данные сессии.
•
$_COOKIE — куки.
•
$_FILES — загруженные файлы.
•
$_SERVER — информация о сервере.
Как обрабатывать формы?
•
Метод формы: GET или POST.
•
$_POST['field_name'] для получения.
•
Валидация: filter_var(), htmlspecialchars().
•
Проверка: isset(), empty().
•
CSRF-токены для безопасности.
Как работает echo и print?
•
echo — вывод, без возврата значения.
•
print — возвращает 1, чуть медленнее.
•
echo 'a', 'b' — несколько аргументов.
•
print только один аргумент.
•
Короткий тег: <?= $var ?>.
Что такое комментарии в PHP?
•
Однострочные: // комментарий.
•
Однострочные: # комментарий.
•
Многострочные: /* ... */.
•
PHPDoc: /** @param type $name */.
•
Комментируйте зачем, не что.
Как работать с JSON в PHP?
•
Кодирование: json_encode($array, JSON_UNESCAPED_UNICODE).
•
Декодирование: json_decode($json, true).
•
true для ассоциативного массива.
•
Проверка ошибок: json_last_error().
•
Для API: header('Content-Type: application/json').
Как работать с датой и временем?
•
date('Y-m-d H:i:s') — форматирование.
•
time() — Unix timestamp.
•
strtotime('next Monday').
•
DateTime класс: new DateTime().
•
DateInterval для разницы.
Что такое DateTime класс?
•
new DateTime() — текущее время.
•
new DateTime('2024-01-15').
•
$dt->format('Y-m-d').
•
$dt->modify('+1 day').
•
$dt1->diff($dt2) — разница.
Как работать с файлами?
•
file_get_contents() — прочитать.
•
file_put_contents() — записать.
•
fopen(), fread(), fwrite(), fclose().
•
file_exists() — проверка.
•
unlink() — удалить.
Как загрузить файл на сервер?
•
Форма: enctype='multipart/form-data'.
•
$_FILES['input_name'].
•
Проверка ошибок: $_FILES['file']['error'].
•
move_uploaded_file() для сохранения.
•
Валидация типа и размера.
Как работать с директориями?
•
scandir() — список файлов.
•
mkdir() — создать.
•
rmdir() — удалить пустую.
•
is_dir() — проверка.
•
glob('*.php') — поиск по маске.
Что такое сериализация?
•
serialize() — объект в строку.
•
unserialize() — обратно.
•
Для сохранения в файл/БД.
•
JSON предпочтительнее для обмена.
•
__sleep(), __wakeup() — магические методы.
Как работать с регулярными выражениями?
•
preg_match() — поиск.
•
preg_match_all() — все совпадения.
•
preg_replace() — замена.
•
preg_split() — разбиение.
•
Модификаторы: i, s, m, u.
Как отправить email в PHP?
•
mail() — базовая, ненадёжная.
•
PHPMailer — рекомендуется.
•
composer require phpmailer/phpmailer.
•
SMTP настройка для надёжности.
•
SwiftMailer/Symfony Mailer — альтернативы.
Как работать с cURL?
•
curl_init() — инициализация.
•
curl_setopt() — опции.
•
curl_exec() — выполнение.
•
curl_close() — закрытие.
•
CURLOPT_RETURNTRANSFER = true для получения ответа.
Как отправить HTTP запрос?
•
file_get_contents() с контекстом.
•
cURL для сложных запросов.
•
Guzzle HTTP — популярная библиотека.
•
composer require guzzlehttp/guzzle.
•
Symfony HTTP Client — альтернатива.
Как парсить XML?
•
simplexml_load_string() — просто.
•
simplexml_load_file().
•
DOMDocument — мощнее.
•
XMLReader — для больших файлов.
•
XPath для поиска.
Как парсить HTML?
•
DOMDocument::loadHTML().
•
DOMXPath для поиска.
•
libxml_use_internal_errors(true).
•
Simple HTML DOM Parser — библиотека.
•
Symfony DomCrawler — современная.
Как генерировать PDF?
•
TCPDF — популярная библиотека.
•
FPDF — простая.
•
mPDF — поддержка UTF-
8.
•
Dompdf — HTML в PDF.
•
composer require dompdf/dompdf.
Как работать с изображениями?
•
GD библиотека — встроенная.
•
imagecreatefromjpeg(), imagepng().
•
Intervention Image — удобная обёртка.
•
Imagick — мощнее, требует установки.
•
Ресайз, кроп, водяные знаки.
Как работать с CSV?
•
fgetcsv() — чтение строки.
•
fputcsv() — запись строки.
•
array_map(function($v){return str_getcsv($v);}, file('data.csv')).
•
League\Csv — библиотека.
•
Кодировка: mb_convert_encoding().
Как работать с Excel?
•
PhpSpreadsheet — стандарт.
•
composer require phpoffice/phpspreadsheet.
•
Чтение: IOFactory::load().
•
Запись: new Spreadsheet().
•
Поддержка xlsx, xls, csv.
Как генерировать QR-коды?
•
chillerlan/php-qrcode.
•
endroid/qr-code.
•
composer require endroid/qr-code.
•
Вывод как PNG, SVG.
•
Настройка размера и логотипа.
Как работать с ZIP архивами?
•
ZipArchive класс.
•
$zip->open('file.zip', ZipArchive::CREATE).
•
$zip->addFile().
•
$zip->extractTo().
•
$zip->close().
Как кэшировать данные?
•
APCu — в памяти.
•
Memcached — распределённый.
•
Redis — персистентный.
•
Файловый кэш — простой.
•
Symfony Cache — абстракция.
Что такое ООП в PHP?
•
Объектно-ориентированное программирование.
•
Классы и объекты.
•
Инкапсуляция, наследование, полиморфизм.
•
Модификаторы доступа.
•
Интерфейсы и абстрактные классы.
Как создать класс?
•
class ClassName { }.
•
Свойства: public $name;.
•
Методы: public function method() { }.
•
Конструктор: __construct().
•
Создание: $obj = new ClassName().
Что такое модификаторы доступа?
•
public — доступен отовсюду.
•
protected — класс и наследники.
•
private — только в классе.
•
PHP 8.1+: readonly свойства.
•
По умолчанию public.
Как работает наследование?
•
class Child extends Parent.
•
Наследует свойства и методы.
•
parent::method() — вызов родителя.
•
Переопределение методов.
•
PHP поддерживает только одиночное наследование.
Что такое интерфейсы?
•
interface Name { public function method(); }.
•
Контракт без реализации.
•
class X implements Interface.
•
Можно реализовать несколько.
•
Все методы public.
Что такое абстрактные классы?
•
abstract class Name { }.
•
Нельзя создать экземпляр.
•
Могут содержать реализацию.
•
abstract function — без реализации.
•
Наследники должны реализовать абстрактные методы.
Что такое трейты?
•
trait Name { методы }.
•
use TraitName; в классе.
•
Решают проблему множественного наследования.
•
Можно использовать несколько.
•
Конфликты разрешаются явно.
Что такое статические свойства и методы?
•
static $property, static function.
•
Вызов: ClassName::method().
•
self:: внутри класса.
•
static:: позднее статическое связывание.
•
Не требуют создания объекта.
Что такое магические методы?
•
__construct — конструктор.
•
__destruct — деструктор.
•
__get, __set — доступ к свойствам.
•
__call — вызов несуществующих методов.
•
__toString — преобразование в строку.
Что такое final?
•
final class — нельзя наследовать.
•
final function — нельзя переопределить.
•
Для защиты от изменений.
•
Immutable объекты часто final.
•
Используйте осознанно.
Что такое пространства имён?
•
namespace App\Models;.
•
Позволяют избежать конфликтов имён.
•
use App\Models\User;.
•
Полное имя: \App\Models\User.
•
PSR-4 — автозагрузка по namespace.
Как работает автозагрузка?
•
spl_autoload_register().
•
PSR-4 стандарт.
•
Composer autoload.
•
namespace = путь к файлу.
•
require 'vendor/autoload.php'.
Что такое Dependency Injection?
•
Передача зависимостей через конструктор/методы.
•
Вместо создания внутри класса.
•
Упрощает тестирование.
•
DI контейнеры автоматизируют.
•
Инверсия контроля.
Что такое позднее статическое связывание?
•
static:: вместо self::.
•
Использует класс вызова, не определения.
•
Важно при наследовании.
•
get_called_class().
•
Для фабричных методов.
Как клонировать объект?
•
$copy = clone $object.
•
__clone() для кастомизации.
•
Поверхностное копирование по умолчанию.
•
Глубокое — вручную клонировать вложенные.
•
Разница с = (присваивание ссылки).
Что такое анонимные классы?
•
$obj = new class { }.
•
PHP 7.0+.
•
Для одноразовых реализаций.
•
Могут наследовать и реализовывать интерфейсы.
•
Используются в тестах, моках.
Что такое enum в PHP?
•
PHP 8.1+.
•
enum Status { case Pending; case Active; }.
•
Backed enums: enum Status: string { case Pending = 'pending'; }.
•
Типобезопасные перечисления.
•
Методы можно добавлять.
Что такое readonly свойства?
•
PHP 8.1+.
•
readonly public string $name;.
•
Устанавливается только раз.
•
PHP 8.2: readonly class.
•
Для immutable объектов.
Что такое constructor property promotion?
•
PHP 8.0+.
•
public function __construct(public string $name).
•
Объявление свойства в конструкторе.
•
Меньше boilerplate кода.
•
Работает с модификаторами доступа.
Что такое паттерн Singleton?
•
Только один экземпляр класса.
•
private __construct().
•
static getInstance().
•
Сложно тестировать.
•
Часто считается антипаттерном.
Как подключиться к MySQL?
•
PDO: new PDO('mysql:host=localhost;dbname=test', 'user', 'pass').
•
MySQLi: new mysqli().
•
PDO предпочтительнее.
•
Charset: charset=utf8mb4.
•
try/catch для ошибок.
Что такое PDO?
•
PHP Data Objects.
•
Универсальный интерфейс к БД.
•
Работает с MySQL, PostgreSQL, SQLite.
•
Prepared statements.
•
Транзакции.
Как выполнить запрос PDO?
•
$pdo->query() — без параметров.
•
$pdo->prepare() + execute() — с параметрами.
•
fetch() — одна строка.
•
fetchAll() — все строки.
•
Режимы: FETCH_ASSOC, FETCH_OBJ.
Что такое prepared statements?
•
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?').
•
$stmt->execute([$id]).
•
Защита от SQL-инъекций.
•
Параметризованные запросы.
•
Именованные: :name.
Как защититься от SQL-инъекций?
•
ВСЕГДА prepared statements.
•
НИКОГДА не конкатенируйте ввод.
•
PDO или MySQLi с параметрами.
•
Валидация входных данных.
•
Минимальные права БД.
Как работать с транзакциями?
•
$pdo->beginTransaction().
•
Выполните запросы.
•
$pdo->commit() — подтвердить.
•
$pdo->rollBack() — откатить.
•
try/catch для обработки ошибок.
Что такое ORM?
•
Object-Relational Mapping.
•
Doctrine — мощный ORM.
•
Eloquent — Laravel ORM.
•
Таблицы как классы.
•
Записи как объекты.
Как работать с PostgreSQL?
•
PDO: pgsql:host=localhost;dbname=test.
•
Функции: JSONB, массивы.
•
pg_* функции (legacy).
•
Doctrine поддерживает полностью.
•
Отличия в синтаксисе SQL.
Как работать с SQLite?
•
PDO: sqlite:/path/to/db.sqlite.
•
Файловая база данных.
•
Для небольших проектов.
•
Тестирования.
•
Без сервера.
Как использовать миграции?
•
Doctrine Migrations.
•
Phinx.
•
Laravel Migrations.
•
Версионирование схемы БД.
•
Командная строка для применения.
Как оптимизировать запросы?
•
Индексы на колонки WHERE, JOIN.
•
EXPLAIN для анализа.
•
Избегайте SELECT *.
•
Limit для больших выборок.
•
Кэширование результатов.
Как работать с Redis в PHP?
•
phpredis расширение или Predis.
•
composer require predis/predis.
•
$redis = new Redis(); $redis->connect().
•
set(), get(), expire().
•
Кэширование сессий, данных.
Как работать с MongoDB?
•
composer require mongodb/mongodb.
•
new MongoDB\Client().
•
Документоориентированная БД.
•
insertOne(), find(), updateOne().
•
BSON документы.
Как пагинировать результаты?
•
LIMIT offset, count.
•
Или LIMIT count OFFSET offset.
•
$page = $_GET['page'] ??
1.
•
$offset = ($page -
•
* $perPage.
•
Общее количество для навигации.
Как реализовать полнотекстовый поиск?
•
MySQL FULLTEXT индексы.
•
MATCH...AGAINST.
•
Elasticsearch для масштаба.
•
Algolia — SaaS.
•
Meilisearch — легковесный.
Как хранить пароли?
•
password_hash($password, PASSWORD_DEFAULT).
•
password_verify() для проверки.
•
НИКОГДА не md5/sha1.
•
Bcrypt используется по умолчанию.
•
PASSWORD_ARGON2ID ещё лучше.
Как защититься от XSS?
•
htmlspecialchars($data, ENT_QUOTES, 'UTF-8').
•
При выводе пользовательских данных.
•
Content-Security-Policy header.
•
HTTPOnly cookies.
•
Используйте шаблонизаторы с автоэкранированием.
Как защититься от CSRF?
•
CSRF токен в форме.
•
Генерация: bin2hex(random_bytes(32)).
•
Сохранение в сессии.
•
Проверка при получении.
•
Фреймворки делают автоматически.
Как безопасно работать с сессиями?
•
session.cookie_httponly =
1.
•
session.cookie_secure = 1 (HTTPS).
•
session.cookie_samesite = 'Strict'.
•
session_regenerate_id() при логине.
•
Таймаут сессии.
Как валидировать входные данные?
•
filter_var() для базовой.
•
filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL).
•
Кастомная валидация.
•
Symfony Validator.
•
Respect/Validation библиотека.
Какие заголовки безопасности установить?
•
Strict-Transport-Security.
•
Content-Security-Policy.
•
X-Content-Type-Options: nosniff.
•
X-Frame-Options: DENY.
•
X-XSS-Protection: 1; mode=block.
Как безопасно загружать файлы?
•
Проверяйте MIME тип (finfo).
•
Не доверяйте расширению.
•
Сохраняйте вне webroot.
•
Генерируйте новые имена.
•
Ограничивайте размер.
Что такое HTTPS и как настроить?
•
Шифрованное соединение.
•
Let's Encrypt — бесплатные сертификаты.
•
Certbot для автоматизации.
•
Редирект HTTP → HTTPS.
•
HSTS заголовок.
Как хранить конфигурацию безопасно?
•
.env файлы (не в git).
•
vlucas/phpdotenv.
•
Переменные окружения.
•
.gitignore для секретов.
•
Vault для продакшена.
Как логировать безопасно?
•
Не логируйте пароли, токены.
•
Маскируйте чувствительные данные.
•
Monolog для структурированного логирования.
•
Уровни: debug, info, warning, error.
•
Ротация логов.
Что такое Composer?
•
Менеджер зависимостей PHP.
•
composer init — создание проекта.
•
composer require vendor/package.
•
composer.lock фиксирует версии.
•
require 'vendor/autoload.php'.
Как работать с Composer?
•
composer install — из lock файла.
•
composer update — обновление.
•
composer require --dev — для разработки.
•
composer dump-autoload — пересоздать.
•
scripts в composer.json.
Что такое PSR стандарты?
•
PSR-1, PSR-12 — стиль кода.
•
PSR-4 — автозагрузка.
•
PSR-7 — HTTP сообщения.
•
PSR-11 — контейнер.
•
PSR-15 — middleware.
Какой фреймворк PHP выбрать?
•
Laravel — самый популярный.
•
Symfony — enterprise, модульный.
•
Slim, Lumen — микрофреймворки.
•
Yii — полнофункциональный.
•
Выбор зависит от задачи.
Что такое Laravel?
•
Самый популярный фреймворк.
•
Eloquent ORM.
•
Blade шаблонизатор.
•
Artisan CLI.
•
Экосистема: Forge, Vapor, Nova.
Что такое Symfony?
•
Enterprise фреймворк.
•
Компонентный подход.
•
Doctrine ORM.
•
Twig шаблонизатор.
•
Многие компоненты в Laravel.
Как тестировать PHP код?
•
PHPUnit — стандарт.
•
composer require --dev phpunit/phpunit.
•
Классы TestCase.
•
Assertions: assertEquals, assertTrue.
•
./vendor/bin/phpunit.
Что такое PHP-FPM?
•
FastCGI Process Manager.
•
Для работы с Nginx.
•
Pool процессов.
•
Лучшая производительность.
•
Конфигурация: www.conf.
Как использовать Docker с PHP?
•
Официальные образы: php:8.2-fpm.
•
Dockerfile для расширений.
•
docker-compose: php + nginx + mysql.
•
Volumes для кода.
•
Xdebug для отладки.
Что нового в PHP 8?
•
JIT компиляция.
•
Named arguments.
•
Attributes.
•
Match expression.
•
Constructor promotion.
•
Union types.
Что нового в PHP 8.1/8.2/8.3?
•
Enums (8.1).
•
Readonly properties/classes.
•
Fibers (8.1).
•
Disjunctive Normal Form types (8.2).
•
json_validate() (8.3).
Как отладить PHP код?
•
var_dump(), print_r().
•
error_log().
•
Xdebug — step debugging.
•
IDE: PhpStorm с Xdebug.
•
dd() в Laravel.
Как профилировать PHP?
•
Xdebug profiler.
•
Blackfire — продвинутый.
•
Tideways — мониторинг.
•
XHProf — Facebook.
•
Анализ узких мест.
Что такое Swoole?
•
Асинхронный PHP сервер.
•
Корутины.
•
WebSockets встроенные.
•
Высокая производительность.
•
Laravel Octane использует.
Как развернуть PHP приложение?
•
Git на сервер.
•
composer install --no-dev.
•
Миграции БД.
•
.env конфигурация.
•
Nginx + PHP-FPM.
•
CI/CD автоматизация.
PHP — Программирование — Технологии — FAQ Портал