PHPでQRコードをつくる

(1/1)
QRコード(2次元バーコード)が流行である。雑誌などに印刷してある QR コードを携帯デジカメで取り込むとURLとして解釈され、キー操作する必要なくアクセスできるという使われ方が多い。
ぱふぅ家のホームページも携帯(現在はiモードのみ)に対応しているので、PC版のトップページに QR コードを表示してみようと考えた。
Y.Swetake さんのサイトにPHPのスクリプトやクラス・ライブラリが公開されている。今回は、これを利用させていただくことにした。なお、このライブラリを利用するには、GD 2.0以上 が組み込まれている必要がある。

なお、QR コード株式会社デンソーウェーブが開発し、その規格・仕様自体はオープンであるが、QR コードという名称だけはデンソーウェーブの登録商標となっている。

(2020年12月19日)PHP8対応。全面改訂。

目次

サンプル・プログラムの実行例

PHPでQRコードをつくる

サンプル・プログラム

圧縮ファイルの内容
qr_sample.phpサンプル・プログラム本体
qr_img.phpQRcode PHP scriptsのPHP7/8対応版

準備

Y.Swetake さんのサイトから、「QRcode Perl CGI & PHP scripts ver. 0.50」をダウンロードして、適当なディレクトリに解凍する。解凍したディレクトリを、定数 QR_IMAGE に代入する。
このライブラリはPHP5.x以上に対応していないので、先ほどダウンロードした "qr_sample.zip" の中に入っている "qr_img.php" に差し替える。

  36: //qr_imgライブラリの場所
  37: define('QR_IMAGE', '../../../../common/qr_img/php/qr_img.php');

解説:QRimageのリクエストURLを取得

プログラムは、ライブラリ qr_img を呼び出すだけの簡単なものである。リクエストURLはユーザー関数 getQRimageURL によって取得する。

 129: /**
 130:  * QRimageのリクエストURLを取得
 131:  * @param   string $text  QRコードにするテキスト
 132:  * @param   string $error ECCレベル(L | M | Q | H)
 133:  * @param   string $type  画像フォーマット(J:JPEG, それ以外:PNG)
 134:  * @param   string $siz   画像サイズ
 135:  * @return  string リクエストURL
 136: */
 137: function getQRimageURL($text, $error='M', $type='P', $size='4') {
 138:     return QR_IMAGE . '?d=' . urlencode($text. '&e=' . $error . 'M&t=' . $type . '&s=' . $size;
 139: }

解説:HTML BODYを作成する

HTMLのtextareaタグを使い、QRコードにしたいテキストを入力する。
QRコードは、imgタグの中でQRimageのリクエストURLを呼び出している。

 141: /**
 142:  * HTML BODYを作成する
 143:  * @param   string $text  QRコードにするテキスト
 144:  * @param   string $url   QRimageリクエストURL
 145:  * @return  string HTML BODY
 146: */
 147: function makeCommonBody($text, $url) {
 148:     $myself = MYSELF;
 149:     $refere = REFERENCE;
 150:     $width  = WIDTH;
 151:     $title  = TITLE;
 152:     $version = '<span style="font-size:small;">' . date('Y/m/d版', filemtime(__FILE__)) . '</span>';
 153: 
 154:     //QRコード(画像)のタグ
 155:     if ($url == '') {
 156:         $image = '';
 157:     } else {
 158:         $image = '<img src="' . $url . '}" />';
 159:     }
 160: 
 161:     $body =<<< EOT
 162: <body>
 163: <h2>{$title} {$version}</h2>
 164: <form name="myform" method="post" action="{$myself}" enctype="multipart/form-data">
 165: テキスト:<br />
 166: <textarea id="text" name="text" rows="8" cols="70">{$text}</textarea><br />
 167: <input type="submit" id="exec" name="exec" value="作成" />
 168: </form>
 169: {$image}
 170: 
 171: <div style="border-style:solid; border-width:1px; margin:20px 0px 0px 0px; padding:5px; width:{$width}px; font-size:small; overflow-wrap:break-word; word-break:break-all;">
 172: <h3>使い方</h3>
 173: <ol>
 174: <li>[<span style="font-weight:bold;">テキスト</span>]にQRコードにしたいテキストを入力し,[<span style="font-weight:bold;">作成</span>] ボタンを押してください.</li>
 175: <li>QRコードを表示します.</li>
 176: </ol>
 177: ※参考サイト:<a href="{$refere}">{$refere}</a>
 178: </div>
 179: </body>
 180: 
 181: EOT;
 182:     return $body;
 183: }

参考サイト

(この項おわり)
header