chillerlan / php-qrcode
A QR Code generator and reader with a user-friendly API. PHP 8.2+
Fund package maintenance!
Ko-Fi
Installs: 16 083 232
Dependents: 179
Suggesters: 5
Security: 0
Stars: 2 122
Watchers: 46
Forks: 308
Open Issues: 4
Requires
- php: ^7.4 || ^8.0
- ext-mbstring: *
- chillerlan/php-settings-container: ^2.1.6 || ^3.2.1
Requires (Dev)
- ext-fileinfo: *
- chillerlan/php-authenticator: ^4.3.1 || ^5.2.1
- phan/phan: ^5.4.5
- phpcompatibility/php-compatibility: 10.x-dev
- phpmd/phpmd: ^2.15
- phpunit/phpunit: ^9.6
- setasign/fpdf: ^1.8.2
- slevomat/coding-standard: ^8.15
- squizlabs/php_codesniffer: ^3.11
Suggests
- chillerlan/php-authenticator: Yet another Google authenticator! Also creates URIs for mobile apps.
- setasign/fpdf: Required to use the QR FPDF output.
- simple-icons/simple-icons: SVG icons that you can use to embed as logos in the QR Code
- dev-main
- v5.0.x-dev
- 5.0.3
- 5.0.2
- 5.0.1
- 5.0.0
- 5.0-beta
- 4.4.2
- 4.4.1
- 4.4.0
- v4.3.x-dev
- 4.3.4
- 4.3.3
- 4.3.2
- 4.3.1
- 4.3.0
- 4.2.0
- 4.1.0
- 4.0.1
- 4.0.0
- 3.4.1
- 3.4.0
- 3.3.0
- v3.2.x-dev
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.1
- 3.1.0
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- v2.0.x-dev
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.9
- 1.0.8
- dev-character-encoding-handler
- dev-qrmatrix-mtype-rework
- dev-v2.0.x-php5
This package is auto-updated.
Last update: 2025-04-01 12:44:08 UTC
README
A PHP QR Code generator based on the implementation by Kazuhiko Arase, namespaced, cleaned up, improved and other stuff.
It also features a QR Code reader based on a PHP port of the ZXing library.
Attention: there is now also a javascript port on NPM: @chillerlan/qrcode.
Overview
Features
- Creation of Model 2 QR Codes, Version 1 to 40
- ECC Levels L/M/Q/H supported
- Mixed mode support (encoding modes can be combined within a QR symbol). Supported modes:
- numeric
- alphanumeric
- 8-bit binary
- 13-bit double-byte:
- kanji (Japanese, Shift-JIS)
- hanzi (simplified Chinese, GB2312/GB18030) as defined in GBT18284-2000
- Flexible, easily extensible output modules, built-in support for the following output formats:
- GdImage (raster graphics: avif, bmp, gif, jpeg, png, webp)
- ImageMagick (multiple supported image formats)
- Markup types: SVG, HTML, etc.
- String types: JSON, plain text, etc.
- Encapsulated Postscript (EPS)
- PDF via FPDF
- QR Code reader (via GD and ImageMagick)
Requirements
- PHP 8.2+
ext-mbstring
- optional:
ext-gd
forQRGdImage
based outputext-imagick
with ImageMagick installedext-fileinfo
required byQRImagick
outputsetasign/fpdf
for the PDF output moduleintervention/image
for alternative GD/ImageMagick output
For the QR Code reader, either ext-gd
or ext-imagick
is required!
Documentation
- The user manual is at https://php-qrcode.readthedocs.io/ (sources)
- An API documentation created with phpDocumentor can be found at https://chillerlan.github.io/php-qrcode/
- The documentation for the
QROptions
container is here: chillerlan/php-settings-container - Benchmark results can be found in the
benchmark
branch
Important: Please use the examples from the branch that matches your installed php-qrcode version (
v4.x,
v5.x,
dev-main
)!
The main
(default) branch is the active development for future major versions, and it is most likely incompatible with the latest release versions.
Installation with composer
See the installation guide for more info!
Terminal
composer require chillerlan/php-qrcode
composer.json
{ "require": { "php": "^8.2", "chillerlan/php-qrcode": "dev-main#<commit_hash>" } }
Note: replace dev-main
with a version constraint, e.g. ^5.0
- see releases for valid versions.
Quickstart
We want to encode this URI for a mobile authenticator into a QRcode image:
$data = 'otpauth://totp/test?secret=B3JX4VCVJDVNXNZ5&issuer=chillerlan.net'; // quick and simple: echo '<img src="'.(new QRCode)->render($data).'" alt="QR Code" />';
Wait, what was that? Please again, slower! See Advanced usage in the manual. Also, have a look in the examples folder for some more usage examples.
Reading QR Codes
Using the built-in QR Code reader is pretty straight-forward:
// it's generally a good idea to wrap the reader in a try/catch block because it WILL throw eventually try{ $result = (new QRCode)->readFromFile('path/to/file.png'); // -> DecoderResult // you can now use the result instance... $content = $result->data; $matrix = $result->getMatrix(); // -> QRMatrix // ...or simply cast it to string to get the content: $content = (string)$result; } catch(Throwable $e){ // oopsies! }
Shameless advertising
Hi, please check out some of my other projects that are way cooler than qrcodes!
- js-qrcode - a javascript port of this library
- php-authenticator - a Google Authenticator implementation (see authenticator example)
- php-httpinterface - a PSR-7/15/17/18 implemetation
- php-oauth - an OAuth 1/2 client library, fully PSR-7/PSR-17/PSR-18 compatible
- php-database - a database client & querybuilder for MySQL, Postgres, SQLite, MSSQL, Firebird
- php-tootbot - a Mastodon bot library (see @dwil)
Disclaimer!
I don't take responsibility for molten CPUs, misled applications, failed log-ins etc.. Use at your own risk!
License notice
- Parts of this code are ported to PHP from the ZXing project and licensed under the Apache License, Version 2.0.
- The documentation is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) License.
Trademark Notice
The word "QR Code" is a registered trademark of DENSO WAVE INCORPORATED
https://www.qrcode.com/en/faq.html#patentH2Title