การสร้างโค้ด QR แบบไดนามิกด้วย PHP [ปิด]


99

ฉันกำลังพยายามสร้างรหัส QR บนเว็บไซต์ของฉัน สิ่งที่พวกเขาต้องทำคือมี URL อยู่ในนั้นซึ่งตัวแปรในไซต์ของฉันจะให้มา วิธีที่ง่ายที่สุดในการทำเช่นนี้คืออะไร?


9
อย่าประดิษฐ์ล้อใหม่! คำตอบด้านล่างนี้สมบูรณ์แบบ
Jordan Arseno

4
Akor: คุณช่วยยกเลิกคำตอบของฉันได้ไหม Google ได้เลิกใช้ APIซึ่งคำตอบของฉันต้องอาศัยดังนั้นจึงมีจุดประสงค์เพียงเล็กน้อยต่อจากนี้ไป
เดวิดบอกว่าคืนสถานะโมนิกา

คำตอบ:


185

นอกจากนี้ยังมีห้องสมุดรหัส QR ที่โพสต์โดย@abaumg Google ยังมีไฟล์รหัส QR API รหัส QR 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 หรือไม่? ฉันหมายถึงข้อ จำกัด เป็น: จำนวนคำขอในช่วงเวลาที่กำหนด ฯลฯ
Lobo

12
ควรสังเกตว่าสิ่งนี้เลิกใช้งานแล้ว Google วางแผนที่จะให้การสนับสนุนต่อไปจนถึงปี 2015 เช่นเคยข้อแม้ emptor
blainarmstrong

4
@Lobo ตามเอกสารของพวกเขา: " คุณสามารถโทรไปยัง Google Chart API ได้ไม่ จำกัด จำนวนครั้งต่อวันอย่างไรก็ตามเราขอสงวนสิทธิ์ในการบล็อกการใช้งานใด ๆ ที่เราถือว่าเป็นการละเมิด "
Alexandru Guzinschi

3
ฉันหาคำตอบโดย @abaumg ดีกว่าเพราะมันไม่ได้ขึ้นอยู่กับบุคคลที่สามเช่น google ...
arod

5
ก.ย. 2019 - ยังคงใช้งานได้ ณ ตอนนี้!
Anupam

87

วิธีที่ง่ายที่สุดในการสร้างรหัส QR กับ PHP เป็นห้องสมุด phpqrcode


6
+1 สิ่งนี้ตอบคำถามได้ใกล้ชิดยิ่งขึ้นคุณสามารถสร้างโค้ด QR ได้ด้วยตัวคุณเองโดยไม่ถูก จำกัด ด้วยข้อ จำกัด ของ Google ที่บังคับใช้สำหรับคำขอ นอกจากนี้ยังช่วยให้แน่ใจว่าเว็บไซต์ของคุณใช้งานได้แม้ว่าสัญญาปลายทางของ Google จะเปลี่ยนไปก็ตาม
Sunny R Gupta

คำเตือนที่เป็นธรรม: ดูเหมือนว่าห้องสมุดนี้อาจ "ตายแล้ว" - ผู้เขียนไม่ได้รับการอัปเดตตั้งแต่เดือนตุลาคม 2010 และมีแพตช์สองสามรายการในตัวติดตามปัญหาที่ผู้ใช้ห้องสมุดควรพิจารณาสมัครก่อนใช้ห้องสมุด
CubicleSoft

แต่จะแปลงเป็น mvc มาตรฐานยังไงก็ได้ไอเดีย !!!!
saurabh kamble

@CubicleSoft ฉันคิดว่าผู้พัฒนารับความคิดเห็นของคุณอย่างจริงจังและอัปเดตทันที
mokNathal

@mokNathal - ฉันไม่เห็นอะไรที่แตกต่างที่นี่ รุ่นล่าสุดที่มีอยู่ในหน้าดาวน์โหลดยังคงเป็นรุ่นปี 2010
CubicleSoft

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 (รวมถึง protocole http://)
  • ที่อยู่อีเมล: mailto: name@example.com
  • หมายเลขโทรศัพท์: +16365553344 (รวมรหัสประเทศ)
  • ข้อความ SMS: smsto: หมายเลข: ข้อความ
  • ข้อความ MMS: mms: number: subject
  • วิดีโอ 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

17

ห้องสมุด endroid / QRCodeง่ายต่อการใช้งานบำรุงรักษาอย่างดีและสามารถนำมาติดตั้งโดยใช้นักแต่งเพลง นอกจากนี้ยังมีบันเดิลสำหรับใช้กับ 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วิธีนี้ยอมรับเพียงพารามิเตอร์เดียวฉันจึงเดาว่าคุณควรเชื่อมตัวแปรของคุณเข้าด้วยกันก่อนที่จะส่งผ่าน แต่ฉันไม่แน่ใจว่าฉันเข้าใจปัญหาของคุณอย่างถูกต้องบางทีคุณควรเปิดปัญหาใน repo ของห้องสมุด
Iwazaru

Iwazaruมีคำตอบครับ ..

อยากแบ่งปันไหม ;)
Iwazaru

1
ได้เลย :) ฉันใช้การระเบิด () ใน php เพื่อรวมข้อมูลทั้งหมดจากนั้นระเบิด () หากจำเป็น

10

qrcode-generatorบน Github สคริปต์ที่เรียบง่ายที่สุดและใช้งานได้อย่างมีเสน่ห์

ข้อดี:

  • ไม่มีการพึ่งพาบุคคลที่สาม
  • ไม่มีข้อ จำกัด สำหรับจำนวนการสร้างรหัส QR

ฉันไม่พบเอกสารใด ๆ ในเรื่องนี้ แต่มันดูดีมาก!
Björn C

@ praba230890 ขอตัวอย่างเพิ่มเติมพร้อมสคริปต์นี้ได้ไหม ฉันพยายามรับข้อมูลติดต่อใน QR code 300x300 px ฉันได้ติดตั้ง / ดาวน์โหลดสคริปต์บน localhost ของฉันและ sample_html.php ใช้งานได้ แต่อีกสองคนไม่ได้ ภาษาญี่ปุ่นของฉันไม่ค่อยดีเท่าไหร่ (ตกลงฉันจะใช้ Google แปลภาษา)
alex

โอ้และนี่จะเร็วขึ้น / ดีขึ้นแล้วไลบรารี phpqrcode หรือไม่?
alex

มันหมดหวัง
navjot singh

5

ฉันใช้ google qrcode api มาระยะหนึ่งแล้ว แต่ฉันไม่ค่อยชอบแบบนี้เพราะมันทำให้ฉันต้องอยู่บนอินเทอร์เน็ตเพื่อเข้าถึงรูปภาพที่สร้างขึ้น

ฉันทำการวิจัยเกี่ยวกับ comand-line เล็กน้อยและพบว่า linux มีเครื่องมือบรรทัดคำสั่งqrencodeสำหรับสร้าง qr-code

ฉันเขียนบทนี้เล็กน้อย และส่วนที่ดีก็คือภาพที่สร้างขึ้นมีขนาดน้อยกว่า 1 KB ข้อมูลที่ให้มาเป็นเพียง 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 จะติดตั้งไว้ใต้ฝากระโปรงโดยที่คุณไม่รู้ตัว


escapeshellarg อธิบายนี่ (สำหรับผู้ที่สงสัย) - stackoverflow.com/a/22739494/195722 โดยส่วนตัวแล้วฉันจะไม่ใช้คำสั่งทุกครั้ง (โดยเฉพาะอย่างยิ่งสำหรับคนรุ่นต่อสาธารณะ) และฉันจะใช้ regex อย่างแน่นอนเพื่อให้แน่ใจว่าสิ่งที่พวกเขาส่งผ่านเป็นสตริงที่ฉันคาดหวัง
Natalie Adams

ใช้งานได้ดีบน ubuntu 16.04
Asuquo12

4

ฉันรู้ว่าคำถามคือวิธีสร้างรหัส QR โดยใช้ PHP แต่สำหรับคนอื่น ๆ ที่กำลังมองหาวิธีสร้างรหัสสำหรับเว็บไซต์ที่ทำสิ่งนี้ในจาวาสคริปต์ล้วนเป็นวิธีที่ดี jQuery-QRCodeปลั๊กอิน jQuery ไม่ได้ดี


ฉันใช้ปลั๊กอิน Jquery github.com/lrsjng/jquery-qrcodeมาระยะหนึ่งแล้วก็สวยด้วย อย่างไรก็ตามเอาต์พุตเป็นเพียงไบนารีเท่านั้น ดังนั้นหากคุณต้องการสร้างและบันทึกภาพเป็น PNG ก็จะช่วยได้ไม่มากนัก นั่นเป็นเหตุผลที่นักพัฒนาส่วนใหญ่ที่อ่านคำถามนี้ต้องการ PHP
Kai Noack

มันเป็นไปได้ที่จะดาวน์โหลด JS-สร้างข้อมูลภาพ 100% ในลูกค้า
Quinn Comendant

ขออภัยที่ไม่ชัดเจน ฉันหมายถึง "บันทึกเซิร์ฟเวอร์ไซด์" - ไม่สามารถทำได้ด้วย Javascript เท่านั้น
Kai Noack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.