Dynamiczne generowanie kodu QR za pomocą PHP [zamknięte]

98

Próbuję wygenerować kody QR na mojej stronie internetowej. Wszystko, co muszą zrobić, to mieć w sobie adres URL, który zapewni zmienna w mojej witrynie. Jaki byłby najłatwiejszy sposób na zrobienie tego?

AKor
źródło
9
nie wymyślaj na nowo koła! poniższe odpowiedzi są idealne
Jordan Arseno
4
Akor: czy mógłbyś cofnąć moją odpowiedź? Firma Google wycofała interfejs API, na którym opiera się moja odpowiedź, dlatego odtąd nie ma on większego znaczenia.
David mówi, że przywróć Monikę

Odpowiedzi:

182

Warto dodać, że oprócz biblioteki kodów QR opublikowanej przez @abaumg , Google udostępnia plikQR Codes API QR Codes API Podziękowania dla @Toukakoukan za aktualizację linków .

Aby z tego skorzystać, w zasadzie:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 to rozmiar obrazu QR, który chcesz wygenerować,
  • chljest ciąg url zakodowane chcesz zmienić na kod QR i
  • to choejest (opcjonalne) kodowanie.

Powyższy link daje więcej szczegółów, ale aby go użyć, wystarczy srcwskazać na obrazie zmanipulowaną wartość, na przykład:

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

Próbny:

Społeczność
źródło
4
Czy są jakieś ograniczenia w korzystaniu z Google API? Mam na myśli ograniczenia jak: ilość zgłoszeń w danym czasie itp.
Lobo
11
Należy zauważyć, że jest to przestarzałe. Google planuje kontynuować wsparcie do 2015 r. Dlatego jak zwykle zastrzegaj sobie pustkę.
Blainarmstrong
4
@Lobo Zgodnie z ich dokumentacją : „ Nie ma ograniczeń co do dziennej liczby wywołań interfejsu API Google Chart. Zastrzegamy sobie jednak prawo do blokowania wszelkich zastosowań, które uznamy za nadużycia ”.
Alexandru Guzinschi
3
Uważam, że odpowiedź @abaumg jest lepsza, ponieważ nie zależy od stron trzecich, takich jak Google ...
arod
4
Wrzesień 2019 - nadal działa!
Anupam
87

Najłatwiejszym sposobem generowania kodów QR za pomocą PHP jest biblioteka phpqrcode .

abaumg
źródło
6
+1 to odpowiada bliżej na pytanie, możesz samodzielnie wygenerować kod QR, bez ograniczeń nałożonych przez Google na żądania. Zapewni to również, że Twoja witryna będzie działać, nawet po zmianie umowy dotyczącej punktu końcowego Google.
Sunny R Gupta
Uczciwe ostrzeżenie: Wygląda na to, że ta biblioteka może być „martwa” - autor nie aktualizował jej od października 2010 roku i ma kilka poprawek w module śledzenia problemów, które użytkownicy biblioteki powinni rozważyć przed użyciem.
CubicleSoft
ale jak przekonwertować to na standard MVC jakieś pomysły !!!!
saurabh kamble
@CubicleSoft Myślę, że programista potraktował twój komentarz poważnie i od razu zaktualizował
mokNathal
@mokNathal - nie widzę tu nic innego. Najnowsze wydanie dostępne na stronie z
plikami
24

Biblioteka phpqrcode jest naprawdę szybki, aby skonfigurować i dokumentacja API jest łatwe do zrozumienia.

Oprócz odpowiedzi abaumga załączyłem 2 przykłady PHPz http://phpqrcode.sourceforge.net/examples/index.php

1. Koder QR code

najpierw dołącz bibliotekę ze ścieżki lokalnej

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

następnie, aby wyprowadzić obraz bezpośrednio jako strumień PNG, na przykład:

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

aby zapisać wynik lokalnie jako obraz 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. Dekoder kodu QR

Zobacz także dekoder zxing :

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

Całkiem przydatne do sprawdzenia wyników.

3. Lista formatu danych

Lista formatów danych, których możesz użyć w kodzie QR zgodnie z typem danych:

  • Adres URL witryny: http://stackoverflow.com (łącznie z protokołem http://)
  • adres e-mail: mailto: [email protected]
  • Numer telefonu: +16365553344 (w tym numer kierunkowy kraju)
  • Wiadomość SMS: smsto: numer: wiadomość
  • Wiadomość MMS: mms: numer: temat
  • Film z YouTube: youtube: // ID (może działać na iPhonie, niestandaryzowany)
RafaSashi
źródło
wydaje się, że ta biblioteka nie działa dla różnych danych wejściowych, ale mały i prosty tekst jest w porządku
duckduckgo
Czy możesz podać przykład?
RafaSashi
nic wielkiego, kiedy robię $ codeContents = "www.example.com", jest ok, ale jeśli robię $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=" to nie pokazuje poprawnego obrazu.
duckduckgo
Nie mogę odtworzyć błędu. Działa dobrze z QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); może ma to coś wspólnego z główkami
RafaSashi
2
Czy mogę używać biblioteki php-qrcode do celów komercyjnych, takich jak tworzenie strony internetowej, która wymaga kodu QR w jakiejś części?
Suneeta Singh,
16

Biblioteka endroid / QrCode jest łatwa w użyciu, dobrze utrzymana i można ją zainstalować za pomocą narzędzia Composer . Istnieje również pakiet do bezpośredniego użycia z Symfony.

Instalowanie:

$ composer require endroid/qrcode

Stosowanie :

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

Wygenerowany QRCode

Iwazaru
źródło
Panie Iwazaru , jak mogę użyć, setText()jeśli mam WIELE danych? Na przykład, mam $a = 1, $b = 2, $c = 3?. Potrzebuję więcej niż JEDNEGO zdania lub ciągu znaków. Jak mogę to zrobić?
Ponieważ setTextmetoda akceptuje tylko jeden parametr, sądzę, że przed przekazaniem należy połączyć zmienne w jeden. Ale nie jestem pewien, czy dobrze rozumiem twój problem, może powinieneś otworzyć problem w repozytorium biblioteki.
Iwazaru
Iwazaru Mam odpowiedź proszę pana ..
Chcesz się tym podzielić? ;)
Iwazaru
1
Jasne :) Użyłem implode () w php, aby połączyć wszystkie dane, a następnie eksplodować () w razie potrzeby. To wszystko sir :)
10

qrcode-generator na Github. Najprostszy skrypt i działa jak urok.

Plusy:

  • Brak zależności od stron trzecich
  • Brak ograniczeń co do liczby generacji kodów QR
praba230890
źródło
Nie mogę znaleźć żadnych dokumentów na ten temat, ale wygląda świetnie!
Björn C
@ praba230890 czy możesz podać więcej przykładów z tym skryptem? Próbuję uzyskać informacje kontaktowe w kodzie QR 300x300 px Zainstalowałem / pobrałem skrypt na moim lokalnym hoście i sample_html.php działa. Ale pozostałych dwóch nie. mój japoński nie jest taki dobry (ok, użyję tłumacza google)
Alex
och i czy byłoby to szybsze / lepsze niż biblioteka phpqrcode?
Alex
to jest desperackie.
navjot singh
5

Używam google qrcode api od jakiegoś czasu, ale nie podobało mi się to, ponieważ wymaga to połączenia z Internetem, aby uzyskać dostęp do wygenerowanego obrazu.

Zrobiłem trochę badań w linii poleceń i odkryłem, że linux ma narzędzie wiersza poleceń qrencodedo generowania kodów QR.

Napisałem ten mały scenariusz. A dobrą stroną jest to, że wygenerowany obraz ma rozmiar mniejszy niż 1 KB. Cóż, dostarczone dane to po prostu adres 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);

Następnie w html ładuję obrazek:

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

Wystarczy go zainstalować. [większość aplikacji do przetwarzania obrazu na Linuksie zainstalowałaby go pod maską bez twojej wiedzy.

Piotr
źródło
8
Co się stanie, jeśli pójdziesz dohttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J
wyjaśniono tutaj escapeshellarg (dla tych, którzy się zastanawiają) - stackoverflow.com/a/22739494/195722 . Osobiście nie wypowiadałbym się za każdym razem na polecenie (szczególnie w przypadku pokolenia publicznego) i zdecydowanie użyłbym wyrażenia regularnego, aby upewnić się, że przekazane przez niego są ciągiem, którego się spodziewałem.
Natalie Adams
działa dobrze na ubuntu 16.04
Asuquo12
4

Wiem, że pytanie brzmi, jak generować kody QR za pomocą PHP, ale dla innych, którzy szukają sposobu na generowanie kodów dla stron internetowych, zrobienie tego w czystym javascript jest dobrym sposobem na zrobienie tego. Jquery-qrcode plugin jquery robi to dobrze.

Quinn Comendant
źródło
Od jakiegoś czasu używam wtyczki Jquery github.com/lrsjng/jquery-qrcode , również ładna. Jednak dane wyjściowe są tylko binarne. Więc jeśli musisz wygenerować i zapisać obraz jako PNG, nie pomoże to zbytnio. Dlatego większość programistów czytających to pytanie potrzebuje PHP.
Kai Noack,
Jest to możliwe , aby pobrać JS generowane dane obrazu 100% w kliencie.
Quinn Comendant
Przepraszam, że nie jest to jasne. Miałem na myśli „zapisywanie po stronie serwera” - niemożliwe tylko z Javascriptem.
Kai Noack,