Gerando dinamicamente um código QR com PHP [fechado]

98

Estou tentando gerar códigos QR em meu site. Tudo o que eles precisam fazer é ter um URL, que uma variável em meu site fornecerá. Qual seria a maneira mais fácil de fazer isso?

AKor
fonte
9
não reinvente a roda! as respostas abaixo são perfeitas
Jordan Arseno
4
Akor: você poderia, por favor, não aceitar minha resposta? O Google suspendeu o uso da API da qual depende minha resposta, portanto, de pouco serve a partir de agora.
David diz para restabelecer Monica

Respostas:

181

Vale a pena acrescentar que, além da biblioteca de códigos QR postada por @abaumg , o Google oferece umAPI de códigos QR API de códigos QR muito obrigado a @Toukakoukan pela atualização do link .

Para usar isso, basicamente:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 é o tamanho da imagem QR que você deseja gerar,
  • o chlé a string codificada por url que você deseja transformar em um código QR, e
  • o choeé a codificação (opcional).

O link acima dá mais detalhes, mas para utilizá-lo basta que o srcde uma imagem aponte para o valor manipulado, assim:

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

Comunidade
fonte
4
Existem limitações para o uso da API do Google ?. Quero dizer limitações como: quantidade de solicitações em um determinado horário, etc.
Lobo
11
Deve-se observar que ele foi descontinuado. O Google planeja continuar com o suporte até 2015. Como sempre, caveat emptor.
blainarmstrong
4
@Lobo De acordo com sua documentação : " Não há limite para o número de chamadas por dia que você pode fazer para a API do Google Chart. No entanto, nos reservamos o direito de bloquear qualquer uso que considerarmos abusivo. ".
Alexandru Guzinschi
3
Acho que a resposta de @abaumg é melhor, pois não depende de terceiros como o google ...
arod
4
Setembro de 2019 - ainda funcionando a partir de agora!
Anupam
87

A maneira mais fácil de gerar códigos QR com PHP é a biblioteca phpqrcode .

abaumg
fonte
6
+1 isso responde à pergunta mais de perto, você pode gerar o código QR por conta própria, sem ser limitado pelos limites do Google impostos para solicitações. Isso também garantirá que seu site funcione, mesmo quando o contrato do ponto de extremidade do Google for alterado.
Sunny R Gupta
Aviso justo: parece que esta biblioteca pode estar "morta" - ela não foi atualizada pelo autor desde outubro de 2010 e tem alguns patches no rastreador de problemas que os usuários da biblioteca devem considerar aplicar antes de usar a biblioteca.
CubicleSoft
mas como convertê-lo em padrão mvc quaisquer idéias !!!!
saurabh kamble de
@CubicleSoft eu acho que o desenvolvedor levou seu comentário a sério e o atualizou imediatamente
mokNathal
@mokNathal - Não estou vendo nada diferente aqui. O lançamento mais recente disponível na página de Downloads ainda é de 2010.
CubicleSoft
24

A biblioteca phpqrcode é muito rápida de configurar e a documentação da API é fácil de entender.

Além da resposta de abaumg, anexei 2 exemplos PHPde http://phpqrcode.sourceforge.net/examples/index.php

1. Codificador de código QR

primeiro inclua a biblioteca de seu caminho local

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

em seguida, para gerar a imagem diretamente como fluxo PNG, faça, por exemplo:

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

para salvar o resultado localmente como uma imagem 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

Veja também o decodificador zxing :

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

Muito útil para verificar a saída.

3. Lista de formato de dados

Uma lista de formatos de dados que você pode usar em seu código QR de acordo com o tipo de dados:

  • URL do site: http://stackoverflow.com (incluindo o protocolo http://)
  • endereço de e-mail: mailto: [email protected]
  • Número de telefone: +16365553344 (incluindo código do país)
  • Mensagem SMS: smsto: número: mensagem
  • Mensagem MMS: mms: número: assunto
  • Vídeo do YouTube: youtube: // ID (pode funcionar no iPhone, não padronizado)
RafaSashi
fonte
esta biblioteca não parece funcionar para uma variedade de entradas, mas textos pequenos e simples podem ser
usados
Você pode dar um exemplo?
RafaSashi,
nada muito, quando eu faço $ codeContents = "www.example.com" está tudo bem, mas se eu faço $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=" não mostra a imagem correta.
duckduckgo
Não consigo reproduzir o erro. Está funcionando bem com QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); talvez tenha algo a ver com os cabeçalhos
RafaSashi,
2
Posso usar a biblioteca php-qrcode para fins comerciais, como para desenvolver um site que requer código qr em algumas de suas partes?
Suneeta Singh
15

A biblioteca endroid / QrCode é fácil de usar, bem mantida e pode ser instalada usando o composer. Também existe um pacote para usar diretamente com o 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()));

O QRCode gerado

Iwazaru
fonte
Iwazaru senhor, como posso usar setText()se tenho VÁRIOS dados? Por exemplo, eu tenho $a = 1, $b = 2, $c = 3?. Preciso usar mais de UMA frase ou String. Como eu posso fazer isso?
Como o setTextmétodo aceita apenas um parâmetro, acho que você deve concatenar suas variáveis ​​em um antes de passá-lo. Mas não tenho certeza se estou entendendo seu problema corretamente, talvez você deva abrir um problema no repositório da biblioteca.
Iwazaru
Iwazaru , tenho a resposta, senhor ..
Quer compartilhar? ;)
Iwazaru
1
Claro :) Eu usei implode () no php para combinar todos os dados, então explode () se necessário. É isso, senhor :)
10

gerador de qrcode no Github. Script mais simples e funciona como charme.

Prós:

  • Sem dependência de terceiros
  • Sem limitações para o número de gerações de código QR
praba230890
fonte
Não consigo encontrar nenhum documento sobre isso, mas parece ótimo!
Björn C
@ praba230890 você poderia fornecer mais alguns exemplos com este script? Estou tentando obter algumas informações de contato em um código QR 300x300 px. Instalei / baixei o script no meu localhost e o sample_html.php funciona. Mas os outros dois não. meu japonês não é tão bom (ok, vou usar o google tradutor)
alex
oh, e isso seria mais rápido / melhor do que a biblioteca phpqrcode?
alex de
está desesperado.
navjot singh
5

Eu uso o google qrcode api há algum tempo, mas não gostei disso porque requer que eu esteja na Internet para acessar a imagem gerada.

Eu fiz uma pequena pesquisa de linha de comando e descobri que o linux tem uma ferramenta de linha de comando qrencodepara gerar códigos QR.

Eu escrevi este pequeno script. E a parte boa é que a imagem gerada tem menos de 1 KB de tamanho. Bem, os dados fornecidos são simplesmente um 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);

Então no html carrego a imagem:

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

Você só precisa instalá-lo. [a maioria dos aplicativos de imagem no Linux o teria instalado sob o capô sem você perceber.

Peter
fonte
8
O que acontece se você for ahttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J
escapeshellarg explicado aqui (para aqueles que estão se perguntando) - stackoverflow.com/a/22739494/195722 . Pessoalmente, eu não pagaria um comando todas as vezes (especialmente para uma geração voltada para o público) e definitivamente usaria regex para ter certeza de que o que eles transmitiram era uma string que eu esperava.
Natalie Adams,
funciona bem no ubuntu 16.04
Asuquo12
4

Eu sei que a questão é como gerar códigos QR usando PHP, mas para outras pessoas que estão procurando uma maneira de gerar códigos para sites que fazem isso em javascript puro é uma boa maneira de fazer isso. O plugin jquery-qrcode jquery faz isso bem.

Quinn Comendant
fonte
Estou usando o plugin Jquery github.com/lrsjng/jquery-qrcode por um tempo, também bonito. No entanto, a saída é apenas binária. Portanto, se você precisar gerar e salvar uma imagem como PNG, não ajudará muito. É por isso que a maioria dos desenvolvedores que lêem esta questão precisa de PHP.
Kai Noack
É possível baixar uma imagem de dados gerada por JS 100% no cliente.
Quinn Comendant
Desculpe por não ter sido claro. Eu quis dizer "salvar do lado do servidor" - não é possível apenas com Javascript.
Kai Noack