Tự động tạo mã QR bằng PHP [đã đóng]


98

Tôi đang cố tạo mã QR trên trang web của mình. Tất cả những gì họ phải làm là có một URL trong đó, một biến trên trang web của tôi sẽ cung cấp. Cách dễ nhất để làm điều này là gì?


9
đừng phát minh lại bánh xe! câu trả lời dưới đây là hoàn hảo
Jordan Arseno

4
Akor: bạn có thể vui lòng bỏ chấp nhận câu trả lời của tôi không? Google đã ngừng sử dụng API mà câu trả lời của tôi dựa vào đó, do đó nó chỉ phục vụ mục đích nhỏ từ bây giờ.
David nói hãy phục hồi Monica vào

Câu trả lời:


181

Điều đáng nói là, ngoài thư viện mã QR do @abaumg đăng , Google còn cung cấp mộtAPI mã QR QR Codes API nhiều nhờ @Toukakoukan cho cập nhật liên kết .

Để sử dụng điều này, về cơ bản:

https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=http%3A%2F%2Fwww.google.com%2F&choe=UTF-8
  • 300x300 là kích thước của hình ảnh QR bạn muốn tạo,
  • những chllà chuỗi url-mã hóa bạn muốn thay đổi thành một mã QR, và
  • những choelà (không bắt buộc) mã hóa.

Liên kết, ở trên, cung cấp nhiều chi tiết hơn, nhưng để sử dụng nó, chỉ cần srcmột hình ảnh trỏ đến giá trị được thao tác, như sau:

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

Bản giới thiệu:


4
Có bất kỳ giới hạn nào đối với việc sử dụng API Google không ?. Ý tôi là các giới hạn như: số lượng yêu cầu trong một thời gian nhất định, v.v.
Lobo

11
Cần lưu ý rằng điều này đã không được dùng nữa. Google có kế hoạch tiếp tục hỗ trợ cho đến năm 2015. Vì vậy, như mọi khi, hãy cảnh báo trước.
blainarmstrong

4
@Lobo Theo tài liệu của họ : " Không có giới hạn về số lượng cuộc gọi mỗi ngày mà bạn có thể thực hiện đối với Google Chart API. Tuy nhiên, chúng tôi có quyền chặn bất kỳ hành vi sử dụng nào mà chúng tôi coi là lạm dụng ".
Alexandru Guzinschi

3
Tôi thấy câu trả lời của @abaumg tốt hơn vì nó không phụ thuộc vào các bên thứ 3 như google ...
AROD

4
Tháng 9 năm 2019 - vẫn hoạt động cho đến nay!
Anupam

87

Cách dễ nhất để tạo mã QR bằng PHP là thư viện phpqrcode .


6
+1 điều này trả lời câu hỏi chặt chẽ hơn, bạn có thể tự tạo mã QR mà không bị giới hạn bởi các giới hạn của Google được thực thi cho các yêu cầu. Điều này cũng sẽ đảm bảo rằng trang web của bạn hoạt động, ngay cả khi hợp đồng điểm cuối của google thay đổi.
Sunny R Gupta

Cảnh báo hợp lý: Có vẻ như thư viện này có thể đã "chết" - tác giả đã không cập nhật nó từ tháng 10 năm 2010 và có một vài bản vá trong trình theo dõi vấn đề mà người dùng thư viện nên cân nhắc áp dụng trước khi sử dụng thư viện.
CubicleSoft

nhưng làm thế nào để chuyển nó thành tiêu chuẩn mvc bất kỳ ý tưởng !!!!
saurabh kamble

@CubicleSoft tôi nghĩ rằng nhà phát triển mất bình luận của bạn nghiêm túc và cập nhật ngay lập tức
mokNathal

@mokNathal - Tôi không thấy điều gì khác biệt ở đây. Việc phát hành gần đây nhất có sẵn trên trang tải về vẫn là từ năm 2010.
CubicleSoft

24

Các thư viện phpqrcode thực sự nhanh để cấu hình và tài liệu API là dễ hiểu.

Ngoài câu trả lời của abaumg, tôi đã đính kèm 2 ví dụ PHPtừ http://phpqrcode.sourceforge.net/examples/index.php

1. Bộ mã hóa mã QR

đầu tiên bao gồm thư viện từ đường dẫn địa phương của bạn

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

sau đó để xuất hình ảnh trực tiếp dưới dạng luồng PNG, hãy làm như sau:

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

để lưu kết quả cục bộ dưới dạng hình ảnh 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. Bộ giải mã mã QR

Xem thêm bộ giải mã zxing :

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

Khá hữu ích để kiểm tra đầu ra.

3. Danh sách định dạng dữ liệu

Danh sách định dạng dữ liệu bạn có thể sử dụng trong mã QR của mình theo loại dữ liệu:

  • URL trang web: http://stackoverflow.com (bao gồm cả protocole http://)
  • địa chỉ email: mailto: name@example.com
  • Số điện thoại: +16365553344 (bao gồm mã quốc gia)
  • Tin nhắn SMS: smsto: number: tin nhắn
  • Tin nhắn MMS: mms: number: chủ đề
  • Video YouTube: youtube: // ID (có thể hoạt động trên iPhone, không được chuẩn hóa)

doesnt thư viện này dường như làm việc cho nhiều đầu vào, văn bản nhỏ, đơn giản là dù sao
duckduckgo

Bạn có thể vui lòng cung cấp một ví dụ?
RafaSashi

không có gì nhiều, khi tôi làm $ codeContents = "www.example.com" thì không sao nhưng nếu tôi làm $ codeContents = "www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttIr1B0=" thì nó không hiển thị hình ảnh chính xác.
duckduckgo

Tôi không thể tạo lại lỗi. Nó hoạt động tốt với QRcode :: png ('www.example.com/some/view/aUdv4rP4BXXLQdpXZC6Gs5C6AfyJM4uB6ntVttI‌ r1B0 ='); có lẽ nó có liên quan gì đó với các tiêu đề
RafaSashi.

2
Tôi có thể sử dụng thư viện php-qrcode cho mục đích thương mại như phát triển một trang web yêu cầu mã qr trong một số phần của nó không?
Suneeta Singh

15

Các thư viện endroid / QrCode rất dễ dàng để sử dụng, duy trì tốt, và có thể được cài đặt bằng nhà soạn nhạc. Ngoài ra còn có một gói để sử dụng trực tiếp với Symfony.

Đang cài đặt:

$ composer require endroid/qrcode

Sử dụng :

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

Mã QRCode được tạo


Iwazaru thưa ông, làm thế nào tôi có thể sử dụng setText()nếu tôi có NHIỀU dữ liệu? Ví dụ, tôi có $a = 1, $b = 2, $c = 3?. Tôi cần sử dụng nhiều hơn MỘT câu hoặc Chuỗi. Làm thế nào tôi có thể làm điều đó?

setTextphương thức chỉ chấp nhận một tham số nên tôi đoán bạn nên nối các biến của mình thành một tham số trước khi chuyển nó. Nhưng tôi không chắc mình đang hiểu vấn đề của bạn một cách chính xác, có lẽ bạn nên mở một vấn đề trong repo của thư viện.
Iwazaru

Iwazaru Tôi đã có câu trả lời thưa ông ..

Muốn chia sẻ nó? ;)
Iwazaru

1
Chắc chắn rồi :) Tôi đã sử dụng implode () trong php để kết hợp tất cả dữ liệu, sau đó bùng nổ () nếu cần.

10

qrcode-generator trên Github. Kịch bản đơn giản nhất và tác phẩm như một sự quyến rũ.

Ưu điểm:

  • Không phụ thuộc bên thứ ba
  • Không có giới hạn về số lượng thế hệ mã QR

Tôi không thể tìm thấy bất kỳ tài liệu nào về điều này, nhưng nó trông rất tuyệt!
Björn C

@ praba230890 bạn có thể cung cấp thêm một số ví dụ về tập lệnh này không? tôi đang cố lấy một số thông tin liên hệ trong mã QR 300x300 px Tôi đã cài đặt / tải xuống tập lệnh trên localhost của mình và sample_html.php hoạt động. Nhưng hai cái còn lại thì không. Tiếng Nhật của tôi không tốt lắm (được rồi tôi sẽ sử dụng google dịch)
alex

oh và điều này sẽ nhanh hơn / tốt hơn sau đó thư viện phpqrcode?
alex

nó tuyệt vọng.
navjot singh 17/02/19

5

Tôi đã sử dụng google qrcode api một thời gian, nhưng tôi không hoàn toàn thích điều này vì nó yêu cầu tôi phải truy cập Internet để truy cập hình ảnh được tạo.

Tôi đã thực hiện một nghiên cứu nhỏ về dòng lệnh và phát hiện ra rằng linux có công cụ dòng lệnh qrencode để tạo mã qr.

Tôi đã viết một kịch bản nhỏ này. Và phần tốt là hình ảnh được tạo ra có kích thước nhỏ hơn 1KB. Dữ liệu được cung cấp chỉ đơn giản là một 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);

Sau đó, trong html, tôi tải hình ảnh:

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

Bạn chỉ cần cài đặt nó. [hầu hết các ứng dụng hình ảnh trên linux sẽ cài đặt nó một cách bí mật mà bạn không nhận ra.


8
Chuyện gì xảy ra nếu bạn đi đếnhttp://www.example.com/profile.php?pid=;rm%20-rf%20--no-preserve-root%20/ ?
Doktor J

Escapehellarg được giải thích ở đây (cho những người tự hỏi) - stackoverflow.com/a/22739494/195722 . Cá nhân tôi sẽ không sử dụng lệnh mỗi lần (đặc biệt là đối với thế hệ công khai) và tôi chắc chắn sẽ sử dụng regex để đảm bảo những gì họ truyền vào là một chuỗi mà tôi mong đợi.
Natalie Adams

hoạt động tốt trên ubuntu 16.04
Asuquo12

4

Tôi biết câu hỏi là làm thế nào để tạo mã QR bằng PHP, nhưng đối với những người khác đang tìm kiếm cách tạo mã cho các trang web thực hiện việc này bằng javascript thuần túy là một cách tốt để làm điều đó. Các jquery-qrcode plugin jquery cũng nó.


Tôi đang sử dụng plugin Jquery github.com/lrsjng/jquery-qrcode một thời gian, cũng khá đẹp. Tuy nhiên, đầu ra chỉ là nhị phân. Vì vậy, nếu bạn cần tạo và lưu hình ảnh dưới dạng PNG, nó sẽ không giúp ích quá nhiều. Đó là lý do tại sao hầu hết các nhà phát triển đọc câu hỏi này đều cần PHP.
Kai Noack

thể tải xuống 100% hình ảnh dữ liệu do JS tạo trong ứng dụng khách.
Quinn Comendant,

Xin lỗi vì không được rõ ràng. Ý tôi là "lưu bên máy chủ" - không thể chỉ với Javascript.
Kai Noack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.