PHPでQRコードをシンプルに(Composerを使わずに)作成する。

2022年01月21日 12時00分 正午の月齢:18.7  月名:寝待月  潮汐:中潮 月齢:18.7[寝待月] 潮汐:中潮
(最終更新日:2024年07月12日)
3年前に投稿 | ウェブ・IT関係 | コメントはありません

6分ぐらいで読めます。

NEM Walletから煤のBinanceにNEMを送るQRコードNEM Walletから煤のZaifにNEMを送るQRコードで、値からQRコードを作る仕組みを数年前に作りましたが、これらはGoogleのAPIを使っています。(参考:QRコードを簡単に作成する方法(googleを利用します))

ところが「Google ChartでQRコードを作成するのって非推奨」なんていうハナシもその当時からちらほらあって、なんとか自前でQRコードの生成ができないかなとずっと思っていました。

なぜこのタイミング? っていうのはさておき、ずっと悶々していたこの課題をどうにかしたくなったので、できるだけシンプルにPHPで作れるか試してみます。(実際はGDライブラリも必要だけど、今使っているエックスサーバーではもともとGDライブラリはインストールされているので、とくに何かをする必要はないみたいです。)

めっちゃ参考にしたのはこのサイト。感謝ですよー。Composerが何かわからず悪戦苦闘したけれど結局よくわからないでいるときに降り注いだ一条の光。

QRコードを生成するライブラリはここから。

というわけで、さっそくやってみましょう。

まずはpublic_htmlの直下にqrcodeというディレクトリを作りました。そこにPHP QR Code Create QR Codes in PHPからダウンロードしたファイルを展開して丸ごとアップロードします。結構なファイル数ですね。

phpqrcode

次に3つのファイルを用意します。

index.php

このフォームに入力した文字をQRコードにするってわけですね。

<!DOCTYPE html>

<html lang="ja">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QRcode generator</title>
</head>

<body>
<form method="GET" action="result.php">
<p><input type="text" name="data"></p>
<p><input type="submit" value="QRコードを表示する"></p>
</form>
</body>

</html>

create_qr.php

フォームのデータを受けてQRコードを作るのですが、とりあえず誤り訂正レベルはQ(25%)にしています。誤り訂正レベルは、レベルL:復元能力7%、レベルM:復元能力15%、レベルQ:復元能力25%、レベルH:復元能力30%とあるので、QRコードを使う環境によって変えてくださいネ。

<?php
// ライブラリ読み込み
require_once "phpqrcode/qrlib.php";

// 画像の保存場所
$filepath = 'qr.png';

// QRコードに入れるテキスト
$contents = $_GET['data'];
if(empty($_GET['data'])){
$contents = "hoge";
}else{
$contents = $_GET['data'];
}

// QRコード画像を出力
QRcode::png($contents, $filepath, QR_ECLEVEL_Q, 6);

//このファイルを画像ファイルとして扱う宣言
header('Content-Type: image/png');
readfile('qr.png');

?>

ほかにも設定ができるのかもしれないけれど、このままでいきましょう。何も文字が入ってない状態で送信したときは、「hoge」を入れておきました。

「QRcode::png($contents, $filepath, QR_ECLEVEL_Q, 6);」のパラメーター部分ですが、調べてみると…

  • QRコードのサイズ
    生成するQRコードのサイズを指定できます。 デフォルト値は3で、その他の値を指定することができます。
  • QRコードのマージン
    QRコードの周囲に設定する余白の幅を指定できます。 デフォルト値は4で、その他の値を指定することができます。

SQL見るだけクエリ#115 PHPで変数からQRコードを生成

ということで、この設定だとサイズ6、マージン4(デフォルト)となるようですね。

result.php

結果を表示します。

<?php
// ライブラリを読み込む
require_once "phpqrcode/qrlib.php";

// PHPファイルを画像のURLとして読み込む
$url = 'create_qr.php?data='.$_GET['data'];
?>

<!DOCTYPE html>

<html lang="ja">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QRcode generator</title>
</head>

<body>
<p><img src="<?php echo $url ?>" /></p>
<p><a href="index.php">トップに戻る</a></p>
</body>

</html>

これら3つのファイルも同じディレクトリにアップロードしたら、準備はOKです。あとはCSSで味付けをしてあげましょう。

いろんな文字を入れて試してみると、無事にQRコードが表示されましたー。

ほっけ

UTF-8の4バイト文字もきちんと扱えましたー。

2024-04-05追記。以下の記事はぜひ目を通してほしいなー。きっと役に立つはず。

古い記事・新しい記事

古い記事 [2021年12月06日]
新しい記事 [2022年02月09日]

コメントはありません

ごめんなさい、コメントフォームは閉鎖しています。

Translate »