[ziel.png] [--scale=24] * * Beispiele: * php bin/qr.php stadionzeitung/aktuell * php bin/qr.php stadionzeitung/aktuell ~/Desktop/qr-plakat.png --scale=30 * php bin/qr.php https://tsv08kulmbach.de/stadionzeitung/aktuell * * Abgrenzung zu den QR-Codes der Stadionzeitung: die erzeugt * bin/stadionzeitung-add.php selbst, klein und für die A5-Seiten * (generate_qr_png() Default-Skalierung, gut 200px). Dieses Skript ist für * Plakate und Aushänge, die in Canva zusammengebaut werden — dort braucht es * ein Vielfaches an Pixeln, sonst franst der Code im Druck aus. * * Ein QR-Code hat die URL fest eingebacken — gegen die Entwicklungs-Config erzeugt * stünde `http://localhost:8000/…` darin und das gedruckte Plakat wäre Altpapier. * Deshalb läuft ein interner Pfad durch club_url(): die öffentliche Vereinsadresse * aus data/club.json, unabhängig von der Umgebung. Der Code stimmt damit schon vor * dem Produktivgang und muss danach nicht neu erzeugt werden. */ if (PHP_SAPI !== 'cli') { exit(1); } require dirname(__DIR__) . '/app/bootstrap.php'; $args = array_values(array_filter(array_slice($argv, 1), static fn (string $a): bool => !str_starts_with($a, '--'))); $scale = 24; foreach ($argv as $arg) { if (str_starts_with($arg, '--scale=')) { $scale = max(1, (int) substr($arg, 8)); } } if ($args === []) { fwrite(STDERR, "Nutzung: php bin/qr.php [ziel.png] [--scale=24]\n"); exit(1); } $target = $args[0]; $isAbsolute = str_starts_with($target, 'http://') || str_starts_with($target, 'https://'); $url = $isAbsolute ? $target : club_url(trim($target, '/')); // Zielpfad: ohne Angabe neben das Skript-Verzeichnis in storage/qr/ ablegen — // Druckmaterial ist kein Website-Asset und hat unter public/ nichts zu suchen. $dest = $args[1] ?? null; if ($dest === null) { $dir = STORAGE_PATH . '/qr'; if (!is_dir($dir)) { mkdir($dir, 0755, true); } $name = preg_replace('/[^a-z0-9]+/', '-', strtolower($isAbsolute ? (string) parse_url($url, PHP_URL_PATH) : $target)) ?? 'qr'; $dest = $dir . '/qr-' . trim($name, '-') . '.png'; } // Der Riegel bleibt, nur zeigt er jetzt auf das richtige Feld: ohne saubere // club.website wäre der gedruckte Code wieder unbrauchbar. if (!$isAbsolute && !str_starts_with($url, 'https://')) { fwrite(STDERR, "WARNUNG club.website in data/club.json ist nicht https ('{$url}') — dieser QR-Code\n"); fwrite(STDERR, " führt nicht auf die echte Seite und ist als Druckvorlage unbrauchbar.\n\n"); } if (!generate_qr_png($url, $dest, $scale)) { fwrite(STDERR, "FEHLER QR-Code konnte nicht erzeugt werden (vendor-manual/phpqrcode vorhanden?)\n"); exit(1); } [$w, $h] = getimagesize($dest) ?: [0, 0]; echo "QR-Code erzeugt\n"; echo " Ziel-URL : {$url}\n"; echo " Datei : {$dest}\n"; echo " Größe : {$w}x{$h} px (bei 300 dpi etwa " . round($w / 300 * 2.54, 1) . " cm)\n";