Generazione dinamica di un codice QR con PHP [chiuso]


98

Sto cercando di generare codici QR sul mio sito web. Tutto quello che devono fare è avere un URL al loro interno, che una variabile sul mio sito fornirà. Quale sarebbe il modo più semplice per farlo?


9
non reinventare la ruota! sotto le risposte sono perfette
Jordan Arseno

4
Akor: potresti non accettare la mia risposta? Google ha deprecato l'API su cui si basa la mia risposta, quindi da ora in poi serve a poco.
David dice di reintegrare Monica il

Risposte:


182

Vale la pena aggiungere che, oltre alla libreria di codici QR pubblicata da @abaumg , Google fornisce un fileAPI dei codici QR API dei codici QR molte grazie a @Toukakoukan per l' aggiornamento del collegamento .

Per usarlo, fondamentalmente:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 è la dimensione dell'immagine QR che desideri generare,
  • la chlè la stringa con codifica URL che si desidera modificare in un codice QR, e
  • la choeè la codifica (opzionale).

Il collegamento, sopra, fornisce maggiori dettagli, ma per usarlo basta avere il srcpunto di un'immagine sul valore manipolato, in questo modo:

<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:


4
Esistono limitazioni per l'utilizzo dell'API di Google ?. Intendo limitazioni come: quantità di richieste in un dato tempo, ecc.
Lobo

11
Va notato che questo è stato deprecato. Google prevede di continuare il supporto fino al 2015. Quindi, come sempre, avvertimento.
blainarmstrong

4
@Lobo Secondo la loro documentazione : " Non c'è limite al numero di chiamate al giorno che puoi effettuare all'API di Google Chart. Tuttavia, ci riserviamo il diritto di bloccare qualsiasi utilizzo che consideriamo abusivo ".
Alexandru Guzinschi

3
Trovo migliore la risposta di @abaumg in quanto non dipende da terze parti come google ...
arrivo il

4
Settembre 2019 - ancora funzionante da ora!
Anupam

87

Il modo più semplice per generare codici QR con PHP è la libreria phpqrcode .


6
+1 questo risponde alla domanda più da vicino, puoi generare il codice QR da solo, senza essere limitato dai limiti di Google imposti per le richieste. Ciò assicurerà anche che il tuo sito web funzioni, anche quando il contratto dell'endpoint Google cambia.
Sunny R Gupta

Avviso equo: sembra che questa libreria possa essere "morta" - non è stata aggiornata dall'autore da ottobre 2010 e ha un paio di patch nel tracker dei problemi che gli utenti della libreria dovrebbero considerare di applicare prima di utilizzare la libreria.
CubicleSoft

ma come convertirlo in mvc standard qualche idea !!!!
saurabh kamble

@CubicleSoft penso che lo sviluppatore abbia preso sul serio il tuo commento e lo abbia aggiornato immediatamente
mokNathal

@mokNathal - Non vedo nulla di diverso qui. L'ultima versione disponibile nella pagina dei download è ancora del 2010.
CubicleSoft

24

La libreria phpqrcode è molto veloce da configurare e la documentazione API è facile da capire.

Oltre alla risposta di abaumg ho allegato 2 esempi PHPda http://phpqrcode.sourceforge.net/examples/index.php

1. Codificatore del codice QR

prima includi la libreria dal tuo percorso locale

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

quindi per visualizzare l'immagine direttamente come flusso PNG, ad esempio:

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

per salvare il risultato localmente come immagine PNG:

$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. Decodificatore del codice QR

Vedi anche il decoder zxing :

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

Abbastanza utile per controllare l'output.

3. Elenco del formato dei dati

Un elenco di formati di dati che puoi utilizzare nel tuo codice QR in base al tipo di dati:

  • URL del sito web: http://stackoverflow.com (incluso il protocollo http://)
  • indirizzo email: mailto: nome@example.com
  • Numero di telefono: +16365553344 (incluso prefisso internazionale)
  • Messaggio SMS: smsto: numero: messaggio
  • Messaggio MMS: mms: numero: oggetto
  • Video di YouTube: youtube: // ID (potrebbe funzionare su iPhone, non standardizzato)

questa libreria non sembra funzionare per una varietà di input, tuttavia il testo piccolo e semplice va bene
duckduckgo

Puoi fornire un esempio?
RafaSashi

niente di molto, quando faccio $ codeContents = "www.example.com" va bene, ma se faccio $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=" l'immagine non è corretta.
duckduckgo

Non riesco a riprodurre l'errore. Funziona bene con QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); forse ha qualcosa a che fare con le intestazioni
RafaSashi

2
Posso utilizzare la libreria php-qrcode per scopi commerciali come sviluppare un sito Web che richiede codice qr in alcune sue parti?
Suneeta Singh

15

La libreria endroid / QrCode è facile da usare, ben mantenuta e può essere installata utilizzando il compositore. C'è anche un bundle da usare direttamente con Symfony.

Installazione:

$ composer require endroid/qrcode

Utilizzo:

<?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()));

Il QRCode generato


Iwazaru signore, come posso utilizzare setText()se ho MULTIPLE dati? Ad esempio, ho $a = 1, $b = 2, $c = 3?. Devo usare più di UNA frase o stringa. Come lo posso fare?

Poiché il setTextmetodo accetta solo un parametro, immagino che dovresti concatenare le tue variabili in uno prima di passarlo. Ma non sono sicuro di aver compreso correttamente il tuo problema, forse dovresti aprire un problema nel repo della libreria.
Iwazaru

Iwazaru ho la risposta, signore ..

Vuoi condividerlo? ;)
Iwazaru

1
Certo :) Ho usato implode () in php per combinare tutti i dati, quindi explode () se necessario. Questo è tutto signore :)

10

qrcode-generator su Github. Script più semplice e funziona come un fascino.

Professionisti:

  • Nessuna dipendenza da terze parti
  • Nessuna limitazione per il numero di generazioni di codici QR

Non riesco a trovare alcun documento su questo, ma sembra fantastico!
Björn C

@ praba230890 potresti fornire altri esempi con questo script? sto cercando di ottenere alcune informazioni di contatto in un codice QR 300x300 px Ho installato / scaricato lo script sul mio localhost e il file sample_html.php funziona. Ma gli altri due no. il mio giapponese non è così buono (ok userò google translate)
alex

oh e sarebbe più veloce / migliore della libreria phpqrcode?
alex

è disperato.
navjot singh

5

Sto usando google qrcode api per un po 'di tempo, ma non mi è piaciuto perché mi richiede di essere su Internet per accedere all'immagine generata.

Ho fatto una piccola ricerca sulla riga di comando e ho scoperto che Linux ha uno strumento a riga di comando qrencodeper la generazione di codici qr.

Ho scritto questa piccola sceneggiatura. E la parte buona è che l'immagine generata ha una dimensione inferiore a 1 KB. Ebbene, i dati forniti sono semplicemente un 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);

Quindi in html carico l'immagine:

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

Devi solo averlo installato. [la maggior parte delle app di imaging su Linux l'avrebbero installata sotto il cofano senza che te ne rendessi conto.


8
Cosa succede se vai ahttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J

escapeshellarg spiegato qui (per chi se lo chiede) - stackoverflow.com/a/22739494/195722 . Personalmente, non sborserei a un comando ogni volta (specialmente per una generazione rivolta al pubblico) e utilizzerei sicuramente regex per assicurarmi che ciò che hanno passato fosse una stringa che mi aspettavo.
Natalie Adams

funziona bene su Ubuntu 16.04
Asuquo12

4

So che la domanda è come generare codici QR utilizzando PHP, ma per altri che sono alla ricerca di un modo per generare codici per siti Web, farlo in puro javascript è un buon modo per farlo. Il plugin jquery-qrcode jquery lo fa bene.


Sto usando il plugin Jquery github.com/lrsjng/jquery-qrcode da un po 'di tempo, anche carino. Tuttavia, l'output è solo binario. Quindi, se hai bisogno di generare e salvare un'immagine come PNG, non sarà di grande aiuto. Ecco perché la maggior parte degli sviluppatori che leggono questa domanda ha bisogno di PHP.
Kai Noack

È possibile scaricare un'immagine di dati generata da JS al 100% nel client.
Quinn Comendant

Scusa se non sono stato chiaro. Intendevo "salvare lato server" - non possibile solo con Javascript.
Kai Noack
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.