Dynamisches Generieren eines QR-Codes mit PHP [geschlossen]

98

Ich versuche, QR-Codes auf meiner Website zu generieren. Sie müssen lediglich eine URL enthalten, die von einer Variablen auf meiner Website bereitgestellt wird. Was wäre der einfachste Weg, dies zu tun?

AKor
quelle
9
Erfinde das Rad nicht neu! Die folgenden Antworten sind perfekt
Jordan Arseno
4
Akor: Könnten Sie bitte meine Antwort ablehnen? Google hat die API, auf die sich meine Antwort stützt, abgelehnt , daher hat sie von nun an wenig Sinn.
David sagt, Monica am

Antworten:

181

Es ist erwähnenswert, dass Google zusätzlich zu der von @abaumg veröffentlichten QR-Code-Bibliothek eineQR-Codes API QR Codes API Vielen Dank an @Toukakoukan für das Link-Update .

Um dies zu verwenden, grundsätzlich:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 ist die Größe des QR-Bildes, das Sie erzeugen möchten.
  • das chlist die URL-kodierten String Sie in einen QR - Code ändern möchten, und
  • Das choeist die (optionale) Codierung.

Der obige Link gibt mehr Details, aber um ihn zu verwenden, muss nur srcein Bild auf den manipulierten Wert zeigen, wie folgt:

<img src="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8" title="Link to Google.com" />

Demo:

Gemeinschaft
quelle
4
Gibt es Einschränkungen bei der Verwendung der Google-API? Ich meine Einschränkungen wie: Anzahl der Anfragen in einer bestimmten Zeit usw.
Lobo
11
Es ist zu beachten, dass dies veraltet ist. Google plant, den Support bis 2015 fortzusetzen. Wie immer Vorbehalt.
Blainarmstrong
4
@Lobo Laut Dokumentation : " Die Anzahl der Anrufe pro Tag, die Sie an die Google Chart-API tätigen können, ist unbegrenzt. Wir behalten uns jedoch das Recht vor, jede Verwendung zu blockieren, die wir als missbräuchlich betrachten. "
Alexandru Guzinschi
3
Ich finde die Antwort von @abaumg besser, da es nicht auf Dritte wie Google
ankommt
4
September 2019 - arbeitet noch!
Anupam
87

Der einfachste Weg, QR-Codes mit PHP zu generieren, ist die phpqrcode-Bibliothek .

abaumg
quelle
6
+1 Dies beantwortet die Frage genauer. Sie können den QR-Code selbst generieren, ohne durch die für Anfragen geltenden Google-Grenzwerte eingeschränkt zu sein. Dadurch wird auch sichergestellt, dass Ihre Website funktioniert, auch wenn sich der Google Endpoint-Vertrag ändert.
Sunny R Gupta
Faire Warnung: Es sieht so aus, als ob diese Bibliothek "tot" sein könnte. Sie wurde vom Autor seit Oktober 2010 nicht mehr aktualisiert und enthält einige Patches im Issue-Tracker, die Benutzer der Bibliothek vor der Verwendung der Bibliothek anwenden sollten.
CubicleSoft
aber wie man es in mvc standard umwandelt irgendwelche ideen !!!!
Saurabh Kamble
@CubicleSoft Ich denke, Entwickler haben Ihren Kommentar ernst genommen und sofort aktualisiert
mokNathal
@mokNathal - Ich sehe hier nichts anderes. Die neueste Version, die auf der Downloadseite verfügbar ist, stammt noch aus dem Jahr 2010.
CubicleSoft
24

Die phpqrcode-Bibliothek ist sehr schnell zu konfigurieren und die API-Dokumentation ist leicht zu verstehen.

Zusätzlich zu Abaumgs Antwort habe ich 2 Beispiele PHPaus http://phpqrcode.sourceforge.net/examples/index.php angehängt

1. QR-Code-Encoder

Fügen Sie zuerst die Bibliothek aus Ihrem lokalen Pfad hinzu

include('../qrlib.php');

Um das Bild dann direkt als PNG-Stream auszugeben, gehen Sie zum Beispiel wie folgt vor:

QRcode::png('your texte here...');

So speichern Sie das Ergebnis lokal als PNG-Bild:

$tempDir = EXAMPLE_TMP_SERVERPATH;

$codeContents = 'your message here...';

$fileName = 'qrcode_name.png';

$pngAbsoluteFilePath = $tempDir.$fileName;
$urlRelativeFilePath = EXAMPLE_TMP_URLRELPATH.$fileName;

QRcode::png($codeContents, $pngAbsoluteFilePath); 

2. QR-Code-Decoder

Siehe auch den zxing- Decoder:

http://zxing.org/w/decode.jspx

Ziemlich nützlich, um die Ausgabe zu überprüfen.

3. Liste der Datenformate

Eine Liste der Datenformate, die Sie in Ihrem QR-Code entsprechend dem Datentyp verwenden können:

  • Website-URL: http://stackoverflow.com (einschließlich des Protokolls http://)
  • E-Mail-Adresse: mailto: [email protected]
  • Telefonnummer: +16365553344 (einschließlich Landesvorwahl)
  • SMS Nachricht: smsto: Nummer: Nachricht
  • MMS-Nachricht: mms: Nummer: Betreff
  • YouTube-Video: youtube: // ID (funktioniert möglicherweise auf dem iPhone, nicht standardisiert)
RafaSashi
quelle
Diese Bibliothek scheint nicht für eine Vielzahl von Eingaben zu funktionieren, kleiner und einfacher Text sind jedoch in Ordnung
duckduckgo
Können Sie bitte ein Beispiel nennen?
RafaSashi
Nicht viel, wenn ich $ codeContents = "www.example.com" mache, ist es in Ordnung, aber wenn ich $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=" mache, wird das richtige Bild nicht angezeigt.
duckduckgo
Ich kann den Fehler nicht reproduzieren. Es funktioniert gut mit QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); Vielleicht hat es etwas mit den
Überschriften
2
Kann ich die PHP-QR-Code-Bibliothek für kommerzielle Zwecke verwenden, um eine Website zu entwickeln, für die zum Teil QR-Code erforderlich ist?
Suneeta Singh
15

Die Endroid / QrCode-Bibliothek ist einfach zu verwenden, gut gepflegt und kann mit Composer installiert werden. Es gibt auch ein Bundle , das direkt mit Symfony verwendet werden kann.

Installation:

$ composer require endroid/qrcode

Verwendung :

<?php

use Endroid\QrCode\QrCode;

$qrCode = new QrCode();
$qrCode
    ->setText('Life is too short to be generating QR codes')
    ->setSize(300)
    ->setPadding(10)
    ->setErrorCorrection('high')
    ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
    ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
    ->setLabel('Scan the code')
    ->setLabelFontSize(16)
    ->setImageType(QrCode::IMAGE_TYPE_PNG)
;

// now we can directly output the qrcode
header('Content-Type: '.$qrCode->getContentType());
$qrCode->render();

// or create a response object
$response = new Response($qrCode->get(), 200, array('Content-Type' => $qrCode->getContentType()));

Der generierte QRCode

Iwazaru
quelle
Iwazaru Sir, wie kann ich verwenden, setText()wenn ich MEHRERE Daten habe? Zum Beispiel, ich habe $a = 1, $b = 2, $c = 3?. Ich muss mehr als EINEN Satz oder String verwenden. Wie kann ich das machen?
Da die setTextMethode nur einen Parameter akzeptiert, sollten Sie Ihre Variablen vor dem Übergeben zu einem verketten. Aber ich bin nicht sicher, ob ich Ihr Problem richtig verstehe. Vielleicht sollten Sie ein Problem im Repo der Bibliothek öffnen.
Iwazaru
Iwazaru Ich habe die Antwort Sir ..
Willst du es teilen? ;)
Iwazaru
1
Sicher :) Ich habe implode () in PHP verwendet, um alle Daten zu kombinieren, und dann bei Bedarf explode (). Das ist es, Sir :)
10

qrcode-generator auf Github. Einfachstes Skript und funktioniert wie Charme.

Vorteile:

  • Keine Abhängigkeit von Dritten
  • Keine Einschränkungen für die Anzahl der QR-Code-Generationen
praba230890
quelle
Ich kann keine Dokumente dazu finden, aber es sieht gut aus!
Björn C
@ praba230890 Könnten Sie weitere Beispiele für dieses Skript bereitstellen? Ich versuche, einige Kontaktinformationen in einem QR-Code 300x300 px zu erhalten. Ich habe das Skript auf meinem localhost installiert / heruntergeladen und die sample_html.php funktioniert. Aber die anderen beiden nicht. Mein Japanisch ist nicht so gut (ok, ich werde Google Übersetzer verwenden)
Alex
oh und wäre das schneller / besser als die phpqrcode bibliothek?
Alex
es ist verzweifelt.
Navjot Singh
5

Ich benutze Google qrcode api seit einiger Zeit, aber das hat mir nicht ganz gefallen, weil ich im Internet sein muss, um auf das generierte Bild zugreifen zu können.

Ich habe ein wenig in der Befehlszeile recherchiert und herausgefunden, dass Linux ein Befehlszeilenprogramm qrencodezum Generieren von QR-Codes hat.

Ich habe dieses kleine Drehbuch geschrieben. Und das Gute daran ist, dass das generierte Bild weniger als 1 KB groß ist. Nun, die gelieferten Daten sind einfach eine URL.

$url = ($_SERVER['HTTPS'] ? "https://" : "http://").$_SERVER['HTTP_HOST'].'/profile.php?id='.$_GET['pid'];
$img = shell_exec('qrencode --output=- -m=1 '.escapeshellarg($url));

$imgData = "data:image/png;base64,".base64_encode($img);

Dann lade ich im HTML das Bild:

<img class="emrQRCode" src="<?=$imgData ?>" />

Sie müssen es nur installiert haben. [Die meisten Imaging-Apps unter Linux hätten es unter der Haube installiert, ohne dass Sie es bemerkt hätten.

Peter
quelle
8
Was passiert, wenn Sie zuhttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J
Escapeeshellarg hier erklärt (für diejenigen, die sich fragen) - stackoverflow.com/a/22739494/195722 . Persönlich würde ich nicht jedes Mal einen Befehl ausgeben (insbesondere für eine öffentlich zugängliche Generation) und ich würde definitiv Regex verwenden, um sicherzustellen, dass das, was sie übergeben haben, eine Zeichenfolge ist, die ich erwartet habe.
Natalie Adams
funktioniert gut auf Ubuntu 16.04
Asuquo12
4

Ich weiß, die Frage ist, wie man QR-Codes mit PHP generiert, aber für andere, die nach einer Möglichkeit suchen, Codes für Websites zu generieren, die dies in reinem Javascript tun, ist dies eine gute Möglichkeit. Das jquery-qrcode jquery Plugin macht es gut.

Quinn Comendant
quelle
Ich benutze das Jquery-Plugin github.com/lrsjng/jquery-qrcode seit einiger Zeit, auch hübsch. Die Ausgabe erfolgt jedoch nur binär. Wenn Sie also ein Bild als PNG generieren und speichern müssen, hilft dies nicht allzu viel. Deshalb benötigen die meisten Entwickler, die diese Frage lesen, PHP.
Kai Noack
Es ist möglich , ein JS-generiertes Datenbild zu 100% auf den Client herunterzuladen.
Quinn Comendant
Tut mir leid, dass ich nicht klar bin. Ich meinte "Server speichern" - nicht nur mit Javascript möglich.
Kai Noack