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 — Попередження при помилці, скрипт продовжується.
•
require — Фатальна помилка, скрипт зупиняється.
•
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).
•
Типові підказки: 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 — автозавантаження за простором імен.
Як працює автозавантаження?
•
spl_autoload_register().
•
Стандарт PSR-
4.
•
Autoload Composer.
•
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 об'єктів.
Що таке конструкторське підвищення властивостей?
•
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_* функції (застарілі).
•
Doctrine підтримує повністю.
•
Відмінності в синтаксисі SQL.
Як працювати з SQLite?
•
PDO: sqlite:/шлях/до/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.
•
Cookies з атрибутом HTTPOnly.
•
Використовуйте шаблонизаторы з автоекрануванням.
Як захиститися від 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 — пересоздати.
•
скрипти в 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.
•
Пул процесів.
•
Найкраща продуктивність.
•
Конфігурація: www.conf.
Як використовувати Docker з PHP?
•
Офіційні образи: php:8.2-fpm.
•
Dockerfile для розширень.
•
docker-compose: php + nginx + mysql.
•
Volumes для коду.
•
Xdebug для відлагодження.
Що нового в PHP 8?
•
JIT-компіляція.
•
Іменовані аргументи.
•
Атрибути.
•
Match вираз.
•
Конструкторське підвищення.
•
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 — покрокове налагодження.
•
IDE: PhpStorm з Xdebug.
•
dd() у Laravel.
Як профілювати PHP?
•
Профілювальник Xdebug.
•
Blackfire — просунутий.
•
Tideways — моніторинг.
•
XHProf — Facebook.
•
Аналіз вузьких місць.
Що таке Swoole?
•
Асинхронний PHP сервер.
•
Корутіни.
•
Вбудовані WebSockets.
•
Висока продуктивність.
•
Використовується в Laravel Octane.
Як розгорнути PHP-додаток?
•
Git на сервері.
•
composer install --no-dev.
•
Міграції бази даних.
•
.env конфігурація.
•
Nginx + PHP-FPM.
•
Автоматизація CI/CD.