91 lines
2.6 KiB
PHP
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";
|