Files
maria_uslugi/js/qr_generateaur.php
T
2026-03-05 10:25:39 +01:00

91 lines
2.6 KiB
PHP

<?php
// tools/generer_code.php — compatible endroid/qr-code v4 et v5
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Writer\SvgWriter;
$url = 'https://uslugi.fr';
$pngSize = 1600; // px
$margin = 20; // px
$publicDir = __DIR__ . '/../public/uploads/img';
$basename = 'qr_uslugi';
if (!filter_var($url, FILTER_VALIDATE_URL)) {
http_response_code(400);
exit("❌ URL invalide\n");
}
if (!is_dir($publicDir) && !mkdir($publicDir, 0775, true)) {
http_response_code(500);
exit("❌ Impossible de créer le dossier: {$publicDir}\n");
}
// Instanciation commune
$qr = new QrCode($url);
// ---------- Compatibilité v4 / v5 ----------
/**
* v5.x :
* - Encoding via new Encoding('UTF-8')
* - ECC via new ErrorCorrectionLevelHigh()
* - RoundBlockSizeMode via new RoundBlockSizeModeMargin()
*
* v4.x :
* - Encoding via string 'UTF-8'
* - ECC via new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH)
* - Pas de RoundBlockSizeModeMargin (on ignore)
*/
$qr->setSize($pngSize);
$qr->setMargin($margin);
// Encoding
if (class_exists(\Endroid\QrCode\Encoding\Encoding::class)) {
// v5
$qr->setEncoding(new \Endroid\QrCode\Encoding\Encoding('UTF-8'));
} else {
// v4
if (method_exists($qr, 'setEncoding')) {
$qr->setEncoding('UTF-8');
}
}
// Error correction
if (class_exists(\Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh::class)) {
// v5
$qr->setErrorCorrectionLevel(new \Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh());
} elseif (class_exists(\Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevel::class)) {
// v4
$qr->setErrorCorrectionLevel(
new \Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevel(
\Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevel::HIGH
)
);
}
// Round blocks (v5 uniquement)
if (
method_exists($qr, 'setRoundBlockSizeMode') &&
class_exists(\Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin::class)
) {
$qr->setRoundBlockSizeMode(new \Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin());
}
// Écriture PNG / SVG
$pngWriter = new PngWriter();
$svgWriter = new SvgWriter();
$png = $pngWriter->write($qr);
$svg = $svgWriter->write($qr);
// Sauvegarde
$pngPath = $publicDir . '/' . $basename . '.png';
$svgPath = $publicDir . '/' . $basename . '.svg';
$png->saveToFile($pngPath);
$svg->saveToFile($svgPath);
echo "✅ QR codes générés :\n";
echo "PNG : " . realpath($pngPath) . "\n";
echo "SVG : " . realpath($svgPath) . "\n";