Динамическое создание QR-кода с помощью PHP [закрыто]

98

Я пытаюсь создать QR-коды на своем сайте. Все, что им нужно сделать, это указать в них URL-адрес, который предоставит переменная на моем сайте. Какой способ сделать это проще всего?

AKor
источник
9
не изобретайте колесо заново! ниже ответы идеальны
Джордан Арсено
4
Акор: Не могли бы вы отменить мой ответ? Google отказался от API, на который опирается мой ответ, поэтому с этого момента он не имеет большого смысла.
Дэвид просит восстановить Монику на работе

Ответы:

182

Стоит добавить, что в дополнение к библиотеке QR-кодов, опубликованной @abaumg , Google предоставляетQR-коды API QR Codes API большое спасибо @Toukakoukan за обновление ссылки .

Чтобы использовать это, в основном:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 это размер QR-изображения, которое вы хотите сгенерировать,
  • это chlстрока в кодировке url, которую вы хотите преобразовать в QR-код, и
  • choeявляется ( по желанию) кодирования.

Ссылка, приведенная выше, дает более подробную информацию, но для ее использования достаточно srcизображения, указывающего на изменяемое значение, например:

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

Демо:

Сообщество
источник
4
Есть ли какие-то ограничения на использование Google API ?. Я имею в виду ограничения, такие как: количество запросов в заданное время и т. Д.
Лобо
11
Следует отметить, что это устарело. Google планирует продолжить поддержку до 2015 года. Так что, как всегда, будьте осторожны.
blainarmstrong
4
@Lobo Согласно их документации : « Нет ограничений на количество вызовов в день, которые вы можете делать в Google Chart API. Однако мы оставляем за собой право блокировать любое использование, которое мы считаем неправомерным ».
Александру Гузинский
3
Я нахожу ответ от @abaumg лучше, поскольку он не зависит от третьих сторон, таких как Google ...
arod
4
Сентябрь 2019 г. - все еще работает!
Anupam
87

Самый простой способ сгенерировать QR-коды с помощью PHP - это библиотека phpqrcode .

abaumg
источник
6
+1 это более точно отвечает на вопрос, вы можете сгенерировать QR-код самостоятельно, не ограничиваясь ограничениями Google, установленными для запросов. Это также гарантирует, что ваш веб-сайт работает, даже если контракт конечной точки Google изменится.
Санни Р Гупта
Справедливое предупреждение: похоже, что эта библиотека «мертвая» - она ​​не обновлялась автором с октября 2010 года и имеет пару исправлений в системе отслеживания проблем, которые пользователям библиотеки следует рассмотреть перед использованием библиотеки.
CubicleSoft,
а вот как преобразовать его в стандарт mvc любые идеи !!!!
саураб камбл
@CubicleSoft, я думаю, разработчик серьезно отнесся к вашему комментарию и сразу же обновил его
mokNathal
@mokNathal - Я не вижу здесь ничего особенного. Самый последний выпуск, доступный на странице загрузок, все еще
выпущен в
24

Библиотеку phpqrcode очень быстро настроить, а документацию по API легко понять.

В дополнение к ответу abaumg я приложил 2 примера PHPиз http://phpqrcode.sourceforge.net/examples/index.php

1. Кодировщик QR-кода

сначала включите библиотеку с вашего локального пути

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

затем для вывода изображения напрямую, как поток PNG, например:

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

чтобы сохранить результат локально как изображение 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. Декодер QR-кода.

См. Также декодер zxing :

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

Довольно полезно проверить вывод.

3. Список формата данных

Список форматов данных, которые вы можете использовать в своем QR-коде в соответствии с типом данных:

  • URL-адрес веб-сайта: http://stackoverflow.com (включая протокол http://)
  • адрес электронной почты: mailto: name@example.com
  • Телефонный номер: +16365553344 (включая код страны)
  • SMS-сообщение: smsto: номер: сообщение
  • MMS-сообщение: ммс: номер: тема
  • Видео на YouTube: youtube: // ID (может работать на iPhone, не стандартизовано)
РафаСаши
источник
эта библиотека, похоже, не работает для различных входов, хотя небольшой и простой текст в порядке
duckduckgo
Не могли бы вы привести пример?
RafaSashi
ничего особенного, когда я делаю $ codeContents = "www.example.com", все в порядке, но если я делаю $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=", оно не показывало правильное изображение.
duckduckgo
Я не могу воспроизвести ошибку. Он отлично работает с QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); возможно, это как-то связано с заголовками
RafaSashi
2
Могу ли я использовать библиотеку php-qrcode в коммерческих целях, например, для разработки веб-сайта, в какой-то части которого требуется код qr?
Suneeta Singh
16

Библиотека endroid / QrCode проста в использовании, в хорошем состоянии и может быть установлена ​​с помощью composer. Также есть пакет, который можно использовать напрямую с Symfony.

Установка:

$ composer require endroid/qrcode

Использование :

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

Сгенерированный QRCode

Ивазару
источник
Ивазару, сэр, как я могу использовать, setText()если у меня НЕСКОЛЬКО данных? Например, у меня есть $a = 1, $b = 2, $c = 3?. Мне нужно использовать более ОДНОГО предложения или строки. Как я могу это сделать?
Поскольку setTextметод принимает только один параметр, я думаю, вам следует объединить свои переменные в один перед его передачей. Но я не уверен, что правильно понимаю вашу проблему, возможно, вам стоит открыть проблему в репозитории библиотеки.
Iwazaru
Ивазару, у меня есть ответ, сэр ..
Хочешь поделиться? ;)
Iwazaru 02
1
Конечно :) Я использовал implode () в php для объединения всех данных, а затем при необходимости explode (). Вот и все, сэр :)
10

qrcode-generator на Github. Скрипт простейший и работает как шарм.

Плюсы:

  • Нет зависимости от третьих лиц
  • Нет ограничений на количество поколений QR-кода
praba230890
источник
Я не могу найти никаких документов по этому поводу, но выглядит отлично!
Björn C
@ praba230890 не могли бы вы привести еще несколько примеров с этим скриптом? Я пытаюсь получить некоторую контактную информацию в QR-коде 300x300 пикселей. Я установил / загрузил скрипт на моем локальном хосте, и sample_html.php работает. Но двое других - нет. мой японский не то, что хорошо (хорошо я буду использовать Google Translate)
Alex
о, а будет ли это быстрее / лучше библиотеки phpqrcode?
Alex
это безнадежно.
Навджот Singh
5

Некоторое время я использую google qrcode api, но мне это не очень понравилось, потому что для доступа к сгенерированному изображению мне нужно быть в Интернете.

Я провел небольшое исследование командной строки и обнаружил, что в Linux есть инструмент командной строки qrencodeдля генерации qr-кодов.

Я написал этот небольшой сценарий. И что хорошо, размер сгенерированного изображения составляет менее 1 КБ. Что ж, предоставленные данные - это просто 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);

Затем в html загружаю изображение:

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

Вам просто нужно установить его. [большинство приложений для работы с изображениями в Linux установили бы его под капотом, даже если бы вы не осознали.

Питер
источник
8
Что будет, если вы пойдете кhttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J
Здесь объясняется escapeshellarg (для тех, кому интересно) - stackoverflow.com/a/22739494/195722 . Лично я не стал бы каждый раз обрабатывать команду (особенно для общедоступного поколения), и я бы определенно использовал регулярное выражение, чтобы убедиться, что то, что они передали, было строкой, которую я ожидал.
Натали Адамс
хорошо работает на ubuntu 16.04
Asuquo12
4

Я знаю, что вопрос в том, как сгенерировать QR-коды с помощью PHP, но для тех, кто ищет способ генерировать коды для веб-сайтов, делать это на чистом javascript - это хороший способ сделать это. JQuery-QRCode JQuery плагин делает это хорошо.

Куинн Комендант
источник
Я использую плагин Jquery github.com/lrsjng/jquery-qrcode какое-то время, тоже симпатичный. Однако вывод только двоичный. Так что, если вам нужно сгенерировать и сохранить изображение в формате PNG, это не слишком поможет. Вот почему большинству разработчиков, читающих этот вопрос, нужен PHP.
Кай Ноак
Это можно загрузить JS-сгенерированные данные изображения 100% в клиенте.
Куинн Комендант
Извините за непонятность. Я имел в виду «сохранить на стороне сервера» - невозможно только с Javascript.
Kai Noack