Універсальність QR-кодів сьогодні важко переоцінити: від меню у ресторанах та оплати послуг до шерингу посилань і візитівок. Але якщо вам, як розробнику, потрібно додати таку функціональність на сайт, ви точно стикалися з однією проблемою.

Більшість безкоштовних онлайн-генераторів або конструкторів QR-кодів мають підводні камені. Вони або лімітують кількість сканувань, або "вшивають" власну рекламу перед перенаправленням, або взагалі вимагають грошей за базовий функціонал.

Виникає логічне питання: навіщо платити або терпіти чужу рекламу, якщо можна написати свій код на PHP буквально за кілька хвилин? У цій статті ми розберемо, як створити власний, повністю безкоштовний і незалежний генератор QR-кодів на PHP 8 за допомогою перевіреної бібліотеки та мінімуму рядків коду.

Чому варто реалізувати генерацію на своєму сервері?

  • Повна незалежність: Ваш код працює завжди, незалежно від сторонніх API чи сторонніх сервісів.

  • Безпека та приватність: Дані ваших користувачів (посилання, тексти) не передаються третім особам.

  • Жодної реклами чи лімітів: Створюйте стільки кодів, скільки потрібно, без обмежень на сканування.

  • Швидкість роботи: PHP 8 демонструє чудову продуктивність, тому генерація відбувається миттєво.

Крок 1. Вибираємо інструмент

Можна, звісно, написати генератор з нуля, розібравшись у специфікації матричного кодування (специфікація ISO/IEC 18004). Але навіщо винаходити велосипед, якщо є потужна, чиста і сучасна бібліотека, яка підтримує PHP 8.x?

Я використовую популярний пакет chillerlan/php-qrcode. Він гнучкий, швидкий та дозволяє генерувати QR-коди у різних форматах (SVG, PNG, JPG і навіть просто в HTML-таблицю).

Встановлюємо бібліотеку через Composer:

Bash

composer require chillerlan/php-qrcode

Крок 2. Пишемо мінімальний код для генерації (PHP 8)

Давайте створимо простий скрипт, який приймає текст або посилання і відразу віддає готове зображення у форматі SVG. Формат SVG ідеально підходить для вебу, оскільки він чудово масштабується і важить лічені кілобайти.

Ось базовий приклад:

PHP

<?php

declare(strict_types=1);

require_once __DIR__ . '/vendor/autoload.php';

use Chillerlan\QRCode\{QRCode, QROptions};

// 1. Дані, які ми хочемо зашити в QR-код (посилання або будь-який текст)
$data = 'Hello World!'; 

// 2. Налаштування (за бажанням, але для гнучкості краще створити)
$options = new QROptions([
    'version'    => 5,                             // Версія QR-коду (розмір матриці)
    'outputType' => QRCode::OUTPUT_MARKUP_SVG,     // Формат виводу
    'eccLevel'   => QRCode::ECC_L,                 // Рівень корекції помилок (L, M, Q, H)
]);

// 3. Ініціалізація та генерація
$qrcode = new QRCode($options);
$svgOutput = $qrcode->render($data);

// Виводимо результат у браузер
header('Content-Type: image/svg+xml');
echo $svgOutput;

Цього мінімуму (близько 15 діючих рядків коду) вже достатньо, щоб отримати чистий, валідний QR-код без стороннього сміття.

Крок 3. Додаємо інтерактивності (Генерація через форму)

Якщо ви хочете зробити повноцінний інструмент на своєму сайті (наприклад, для контент-менеджерів або користувачів), можна обгорнути цей код у просту HTML-форму.

Ось як буде виглядати готовий скрипт index.php:

PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';

use Chillerlan\QRCode\{QRCode, QROptions};

$qrImage = null;
$textToEncode = $_POST['text_data'] ?? '';

if (!empty($textToEncode)) {
    $options = new QROptions([
        'version'          => 7,
        'outputType'       => QRCode::OUTPUT_IMAGE_PNG, // Цього разу згенеруємо PNG base64
        'eccLevel'         => QRCode::ECC_M,
        'connectPaths'     => true,
    ]);

    // Отримуємо зображення у форматі base64 для зручного вбудовування в тег <img>
    $qrImage = (new QRCode($options))->render($textToEncode);
}
?>

<!DOCTYPE html>
<html lang="uk">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Власний генератор QR-кодів на PHP</title>
    <style>
        body { font-family: Arial, sans-serif; max-width: 500px; margin: 50px auto; padding: 20px; text-align: center; }
        textarea { width: 100%; height: 80px; margin-bottom: 15px; padding: 10px; box-sizing: border-box; }
        button { background: #007bff; color: white; padding: 10px 20px; border: none; cursor: pointer; border-radius: 5px; }
        button:hover { background: #0056b3; }
        .result { margin-top: 30px; }
    </style>
</head>
<body>

    <h2>Генератор QR-кодів</h2>
    <p>Введіть посилання або текст, щоб згенерувати чистий QR-код без реклами.</p>

    <form method="POST">
        <textarea name="text_data" placeholder="Введіть ваше посилання тут..." required><?= htmlspecialchars($textToEncode) ?></textarea>
        <button type="submit">Згенерувати код</button>
    </form>

    <?php if ($qrImage): ?>
        <div class="result">
            <h3>Ваш QR-код:</h3>
            <img src="<?= $qrImage ?>" alt="Згенерований QR код">
            <p><small>Клікніть правою кнопкою миші, щоб зберегти зображення.</small></p>
        </div>
    <?php endif; ?>

</body>
</html>

Результат роботи коду

Ось такий вигляд має чистий, згенерований за цим алгоритмом QR-код, який веде на наш корисний інструмент:

Онлайн-генератор QR code

Онлайн-генератор QR code

Висновок

Як бачите, сучасний PHP 8 та екосистема Composer дозволяють вирішувати подібні завдання за лічені хвилини. Навіщо залежати від чиїхось хмарних сервісів, платити за підписки чи змушувати своїх клієнтів дивитися рекламу під час сканування?

Використовуйте цей підхід у своїх CRM, інтернет-магазинах чи на блогах, кастомізуйте кольори (бібліотека це дозволяє) та тримайте повний контроль над своїм кодом!