Generación dinámica de un código QR con PHP [cerrado]

98

Estoy intentando generar códigos QR en mi sitio web. Todo lo que tienen que hacer es tener una URL, que proporcionará una variable en mi sitio. ¿Cuál sería la forma más sencilla de hacer esto?

AKor
fuente
9
¡No reinventes la rueda! Las siguientes respuestas son perfectas
Jordan Arseno
4
Akor: ¿podrías rechazar mi respuesta? Google ha desaprobado la API en la que se basa mi respuesta, por lo que tiene poco propósito de ahora en adelante.
David dice reinstalar a Monica

Respuestas:

182

Vale la pena agregar que, además de la biblioteca de códigos QR publicada por @abaumg , Google proporciona unaAPI de códigos QR API de códigos QR muchas gracias a @Toukakoukan por la actualización del enlace .

Para usar esto, básicamente:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 es el tamaño de la imagen QR que desea generar,
  • el chles la cadena con codificación URL que desea cambiar en un código QR, y
  • la choees la codificación (opcional).

El enlace, arriba, brinda más detalles, pero para usarlo solo tiene que tener srcuna imagen que apunte al valor manipulado, así:

<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" />

Manifestación:

Comunidad
fuente
4
¿Existe alguna limitación para el uso de la API de Google? Me refiero a limitaciones como: cantidad de solicitudes en un tiempo determinado, etc.
Lobo
11
Cabe señalar que esto ha quedado obsoleto. Google planea continuar el soporte hasta 2015. Así que, como siempre, advertencia emptor.
blainarmstrong
4
@Lobo Según su documentación : " No hay límite en la cantidad de llamadas por día que puede realizar a la API de Google Chart. Sin embargo, nos reservamos el derecho de bloquear cualquier uso que consideremos abusivo ".
Alexandru Guzinschi
3
Encuentro respuesta por @abaumg mejor, ya que no depende 3 partes como Google ...
AROD
4
Septiembre de 2019: ¡todavía funciona a partir de ahora!
Anupam
87

La forma más sencilla de generar códigos QR con PHP es la biblioteca phpqrcode .

abaumg
fuente
6
+1 esto responde la pregunta más de cerca, puede generar el código QR por su cuenta, sin estar limitado por los límites de Google impuestos para las solicitudes. Esto también asegurará que su sitio web funcione, incluso cuando cambie el contrato de punto final de Google.
Sunny R Gupta
Advertencia justa: parece que esta biblioteca puede estar "muerta"; el autor no la ha actualizado desde octubre de 2010 y tiene un par de parches en el rastreador de problemas que los usuarios de la biblioteca deberían considerar aplicar antes de usar la biblioteca.
CubicleSoft
pero cómo convertirlo en estándar mvc alguna idea !!!!
saurabh kamble
@CubicleSoft creo que el desarrollador se tomó en serio su comentario y lo actualizó de inmediato
mokNathal
@mokNathal: no veo nada diferente aquí. La versión más reciente disponible en la página de descargas sigue siendo de 2010.
CubicleSoft
24

La biblioteca phpqrcode es muy rápida de configurar y la documentación de la API es fácil de entender.

Además de la respuesta de abaumg, he adjuntado 2 ejemplos PHPde http://phpqrcode.sourceforge.net/examples/index.php

1. Codificador de código QR

primero incluya la biblioteca de su ruta local

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

luego para generar la imagen directamente como secuencia PNG, por ejemplo:

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

para guardar el resultado localmente como una imagen 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. decodificador de código QR

Consulte también el decodificador zxing :

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

Bastante útil para comprobar la salida.

3. Lista de formato de datos

Una lista de formatos de datos que puede utilizar en su código QR según el tipo de datos:

  • URL del sitio web: http://stackoverflow.com (incluido el protocolo http://)
  • dirección de correo electrónico: mailto: [email protected]
  • Número de teléfono: +16365553344 (incluido el código del país)
  • Mensaje SMS: smsto: número: mensaje
  • Mensaje MMS: mms: número: asunto
  • Video de YouTube: youtube: // ID (puede funcionar en iPhone, no estandarizado)
RafaSashi
fuente
esta biblioteca no parece funcionar para una variedad de entradas, aunque el texto pequeño y simple está bien
duckduckgo
¿Puede darnos un ejemplo?
RafaSashi
nada mucho, cuando hago $ codeContents = "www.example.com" está bien, pero si hago $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=" no mostró la imagen correcta.
duckduckgo
No puedo reproducir el error. Funciona bien con QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); tal vez tenga algo que ver con los encabezados
RafaSashi
2
¿Puedo usar la biblioteca php-qrcode con fines comerciales, como para desarrollar un sitio web que requiera código qr en parte?
Suneeta Singh
15

La biblioteca endroid / QrCode es fácil de usar, está bien mantenida y se puede instalar usando Composer. También hay un paquete para usar directamente con Symfony.

Instalando:

$ composer require endroid/qrcode

Uso:

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

El QRCode generado

Iwazaru
fuente
Iwazaru señor, ¿cómo puedo usar setText()si tengo MÚLTIPLES datos? Por ejemplo, tengo $a = 1, $b = 2, $c = 3?. Necesito usar más de UNA oración o cadena. ¿Cómo puedo hacer eso?
Como el setTextmétodo solo acepta un parámetro, supongo que debería concatenar sus variables en uno antes de pasarlo. Pero no estoy seguro de entender su problema correctamente, tal vez debería abrir un problema en el repositorio de la biblioteca.
Iwazaru
Iwazaru , tengo la respuesta, señor ...
Quieres compartirlo ;)
Iwazaru
1
Claro :) Usé implode () en php para combinar todos los datos, luego explotar () si es necesario. Eso es señor :)
10

qrcode-generator en Github. Guión más simple y funciona a la perfección.

Pros:

  • Sin dependencia de terceros
  • Sin limitaciones para el número de generaciones de códigos QR
praba230890
fuente
No puedo encontrar ningún documento sobre esto, ¡pero se ve genial!
Björn C
@ praba230890 ¿podría proporcionar algunos ejemplos más con este script? Estoy tratando de obtener información de contacto en un código QR de 300x300 px. He instalado / descargado el script en mi localhost y el sample_html.php funciona. Pero los otros dos no. mi japonés no es tan bueno (ok, usaré el traductor de Google)
alex
oh, ¿y sería esto más rápido / mejor que la biblioteca phpqrcode?
alex
es desesperado.
navjot singh
5

He estado usando google qrcode api durante algún tiempo, pero esto no me gustó porque requiere que esté en Internet para acceder a la imagen generada.

Hice una pequeña investigación de línea de comandos y descubrí que Linux tiene una herramienta de línea de comandos qrencodepara generar códigos qr.

Escribí este pequeño guión. Y lo bueno es que la imagen generada tiene un tamaño inferior a 1 KB. Bueno, los datos proporcionados son simplemente una 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);

Luego en el html cargo la imagen:

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

Solo necesitas haberlo instalado. [La mayoría de las aplicaciones de imágenes en Linux lo habrían instalado bajo el capó sin que te dieras cuenta.

Pedro
fuente
8
¿Qué sucede si vas ahttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J
escapeshellarg explicado aquí (para aquellos que se preguntan) - stackoverflow.com/a/22739494/195722 . Personalmente, no pagaría un comando cada vez (especialmente para una generación de cara al público) y definitivamente usaría expresiones regulares para asegurarme de que lo que pasaron fuera una cadena que estaba esperando.
Natalie Adams
funciona bien en ubuntu 16.04
Asuquo12
4

Sé que la pregunta es cómo generar códigos QR usando PHP, pero para otros que buscan una forma de generar códigos para sitios web, hacer esto en javascript puro es una buena manera de hacerlo. El complemento jquery jquery-qrcode lo hace bien.

Quinn acusado
fuente
Estoy usando el complemento Jquery github.com/lrsjng/jquery-qrcode desde hace un tiempo, también bastante. Sin embargo, la salida es solo binaria. Entonces, si necesita generar y guardar una imagen como PNG, no ayudará demasiado. Es por eso que la mayoría de los desarrolladores que leen esta pregunta necesitan PHP.
Kai Noack
Es posible descargar una imagen de datos generada por JS al 100% en el cliente.
Quinn Demandado
Perdón por no ser claro. Quise decir "guardar en el servidor", no es posible solo con Javascript.
Kai Noack