Générer dynamiquement un code QR avec PHP [fermé]


98

J'essaie de générer des codes QR sur mon site Web. Tout ce qu'ils ont à faire est d'avoir une URL en eux, qu'une variable sur mon site fournira. Quelle serait la manière la plus simple de procéder?


9
ne réinventez pas la roue! ci-dessous les réponses sont parfaites
Jordan Arseno

4
Akor: pourriez-vous s'il vous plaît désaccepter ma réponse? Google a désapprouvé l'API sur laquelle s'appuie ma réponse, elle ne sert donc plus à rien à partir de maintenant.
David dit de réintégrer Monica

Réponses:


182

Il convient d'ajouter qu'en plus de la bibliothèque de codes QR publiée par @abaumg , Google fournit unAPI des codes QR QR Codes API merci beaucoup à @Toukakoukan pour la mise à jour du lien .

Pour utiliser ceci, en gros:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 est la taille de l'image QR que vous souhaitez générer,
  • il chls'agit de la chaîne codée par URL que vous souhaitez transformer en code QR, et
  • la choeest le codage ( en option).

Le lien ci-dessus donne plus de détails, mais pour l'utiliser, il suffit srcde pointer l'image d'une image sur la valeur manipulée, comme ceci:

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

Démo:


4
Y a-t-il des limites à l'utilisation de l'API Google ?. Je veux dire des limitations comme: quantité de demandes dans un temps donné, etc.
Lobo

11
Il convient de noter que cela est obsolète. Google prévoit de continuer le support jusqu'en 2015. Donc, comme toujours, avertissez emptor.
blainarmstrong

4
@Lobo Selon leur documentation : " Il n'y a pas de limite au nombre d'appels par jour que vous pouvez passer à l'API Google Chart. Cependant, nous nous réservons le droit de bloquer toute utilisation que nous considérons comme abusive. ".
Alexandru Guzinschi

3
Je trouve la réponse de @abaumg meilleure car cela ne dépend pas de tiers comme Google ...
arod

4
Sept 2019 - toujours en activité!
Anupam

87

Le moyen le plus simple de générer des codes QR avec PHP est la bibliothèque phpqrcode .


6
+1 cela répond de plus près à la question, vous pouvez générer vous-même le code QR, sans être limité par les limites de Google appliquées aux demandes. Cela garantira également que votre site Web fonctionne, même lorsque le contrat du point de terminaison Google change.
Sunny R Gupta

Avertissement: il semble que cette bibliothèque soit "morte" - elle n'a pas été mise à jour par l'auteur depuis octobre 2010 et a quelques correctifs dans le suivi des problèmes que les utilisateurs de la bibliothèque devraient envisager d'appliquer avant d'utiliser la bibliothèque.
CubicleSoft

mais comment le convertir en standard mvc des idées !!!!
saurabh kamble

@CubicleSoft Je pense que le développeur a pris votre commentaire au sérieux et mis à jour tout de suite
mokNathal

@mokNathal - Je ne vois rien de différent ici. La version la plus récente disponible sur la page Téléchargements date toujours de 2010.
CubicleSoft

24

La bibliothèque phpqrcode est très rapide à configurer et la documentation de l'API est facile à comprendre.

En plus de la réponse de abaumg Je joins 2 exemples PHPde http://phpqrcode.sourceforge.net/examples/index.php

1. encodeur de code QR

incluez d'abord la bibliothèque de votre chemin local

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

puis pour sortir l'image directement sous forme de flux PNG, par exemple:

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

pour enregistrer le résultat localement sous forme d'image 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. Décodeur de code QR

Voir aussi le décodeur zxing :

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

Très utile pour vérifier la sortie.

3. Liste des formats de données

Une liste de formats de données que vous pouvez utiliser dans votre code QR en fonction du type de données:

  • URL du site Web: http://stackoverflow.com (y compris le protocole http://)
  • adresse e-mail: mailto: nom@exemple.com
  • Numéro de téléphone: +16365553344 (y compris l'indicatif du pays)
  • Message SMS: smsto: numéro: message
  • Message MMS: mms: numéro: sujet
  • Vidéo YouTube: youtube: // ID (peut fonctionner sur iPhone, non standardisé)

cette bibliothèque ne semble pas fonctionner pour une variété d'entrées, le texte petit et simple est bien
duckduckgo

Pouvez-vous donner un exemple?
RafaSashi

rien de plus, quand je fais $ codeContents = "www.example.com" c'est ok mais si je fais $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=" il n'a pas montré l'image correcte.
duckduckgo

Je ne peux pas reproduire l'erreur. Cela fonctionne bien avec QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); peut-être que cela a quelque chose à voir avec les en
RafaSashi

2
Puis-je utiliser la bibliothèque php-qrcode à des fins commerciales, comme pour développer un site Web qui nécessite du code qr dans une partie de sa partie?
Suneeta Singh

15

La bibliothèque endroid / QrCode est facile à utiliser, bien entretenue et peut être installée à l'aide de composer. Il existe également un bundle à utiliser directement avec Symfony.

Installation:

$ composer require endroid/qrcode

Utilisation:

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

Le QRCode généré


Monsieur Iwazaru , comment puis-je utiliser setText()si j'ai PLUSIEURS données? Par exemple, je $a = 1, $b = 2, $c = 3?. Je dois utiliser plus d' UNE phrase ou une chaîne. Comment puis je faire ça?

Comme la setTextméthode n'accepte qu'un seul paramètre, je suppose que vous devriez concaténer vos variables en une seule avant de la passer. Mais je ne suis pas sûr de bien comprendre votre problème, vous devriez peut-être ouvrir un problème dans le dépôt de la bibliothèque.
Iwazaru

Iwazaru, j'ai la réponse monsieur ..

Tu veux le partager? ;)
Iwazaru

1
Bien sûr :) J'ai utilisé implode () en php pour combiner toutes les données, puis exploser () si nécessaire. Thats it sir :)

10

qrcode-generator sur Github. Script le plus simple et fonctionne comme du charme.

Avantages:

  • Aucune dépendance tierce
  • Aucune limitation pour le nombre de générations de code QR

Je ne trouve pas de documentation à ce sujet, mais ça a l'air génial!
Björn C

@ praba230890 pourriez-vous fournir d'autres exemples avec ce script? J'essaie d'obtenir des informations de contact dans un code QR 300x300 px J'ai installé / téléchargé le script sur mon hôte local et le sample_html.php fonctionne. Mais les deux autres non. mon japonais n'est pas si bon (ok j'utiliserai google translate)
alex

oh et serait-ce plus rapide / meilleur que la bibliothèque phpqrcode?
alex

c'est désespéré.
navjot singh

5

J'utilise l'api google qrcode depuis un certain temps, mais je n'ai pas vraiment aimé cela car cela me oblige à être sur Internet pour accéder à l'image générée.

J'ai fait une petite recherche sur la ligne de commande et j'ai découvert que Linux avait un outil de ligne de commande qrencodepour générer des qr-codes.

J'ai écrit ce petit script. Et la bonne partie est que l'image générée a une taille inférieure à 1 Ko. Eh bien, les données fournies sont simplement une 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);

Puis dans le html je charge l'image:

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

Vous devez juste l'avoir installé. [la plupart des applications d'imagerie sur Linux l'auraient installé sous le capot sans que vous vous en rendiez compte.


8
Que se passe-t-il si vous allez àhttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J

escapeshellarg expliqué ici (pour ceux qui se demandent) - stackoverflow.com/a/22739494/195722 . Personnellement, je ne débourserais pas une commande à chaque fois (en particulier pour une génération faisant face au public) et j'utiliserais certainement regex pour m'assurer que ce qu'ils passaient était une chaîne que j'attendais.
Natalie Adams

fonctionne bien sur ubuntu 16.04
Asuquo12

4

Je sais que la question est de savoir comment générer des codes QR en utilisant PHP, mais pour d'autres qui recherchent un moyen de générer des codes pour les sites Web, le faire en javascript pur est un bon moyen de le faire. Le plugin jquery-qrcode jquery le fait bien.


J'utilise le plugin Jquery github.com/lrsjng/jquery-qrcode depuis un moment maintenant, également joli. Cependant, la sortie est uniquement binaire. Donc, si vous devez générer et enregistrer une image au format PNG, cela ne vous aidera pas trop. C'est pourquoi la plupart des développeurs qui lisent cette question ont besoin de PHP.
Kai Noack

Il est possible de télécharger une image de données générée par JS à 100% dans le client.
Quinn Comendant

Excusez-moi de ne pas avoir été clair. Je voulais dire "enregistrer le serveur" - pas possible avec seulement Javascript.
Kai Noack
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.