13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPでcomposerを使わずにQRコードを作成する

Last updated at Posted at 2020-09-14

内容

PHPのライブラリを使用して簡単なサンプルに作成したQRコードを表示できるようにする

環境

  • PHP7

image.png

QRコードの作成

開発環境作成

まずはターミナルなどで作業用のフォルダを作成 & 移動

 $ mkdir php_sample
 $ cd php_sample

その後、phpqrcode/qrlib をダウンロードして、解凍。
解凍した中身を作成した作業用フォルダにコピーなどで移す。

そして、3つのPHPファイルを作成する。

  • トップページ
  • QRコード表示用ページ
  • QRコード作成ファイル

実際のフォルダの中身がこんな感じになっているはず。

image.png

  • トップページ(index.php)
  • QRコード表示用ページ(result.php)
  • QRコード作成ファイル(create_qr.php)

最後に、PHPの内蔵サーバーをターミナルから起動して準備完了。

$ php -S 127.0.0.1:8080

phpファイル作成

ここからは3つのphpファイルを作成していく。

トップページ

簡単なサンプルで試すだけなので、基本的なHTMLのコードとformくらいで十分。
(本当はindex.phpだけど見た目優先でhtmlファイルとして記入してます。)

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>QR</title>
</head>
<body>
	<p>QRテスト</p>
	<form method="GET" action="result.php">
		<input type="text" name="data">
		<input type="submit" value="QRコードを表示する">
	</form>
</body>
</html>

http://127.0.0.1:8080/index にアクセスしてみると、こんなページができてるはず。
image.png

QRコード表示用ページ

ここもそんなに手をかけずに、index.phpからの遷移先程度の役割で十分かと。
(index.php同様、見た目優先でhtmlファイルとして記入してます。)

result.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>QR</title>
</head>
<body>
	<h2>QRコード</h2>
	<?php echo '<img src="create_qr.php" />'; ?>
	<br>
	<a href="index">戻る</a>
</body>
</html>

http://127.0.0.1:8080/index からフォーム経由で移動しているとこんなページが表示される。
image.png

<?php echo '<img src="create_qr.php" />'; ?> でQRコード作成ファイルを指定しているため、記入を忘れたり名前を間違えたりしないように。

QRコード作成ファイル

今回の本題。
といっても、requireでダウンロードしてきたphpqrcode/qrlibを呼び出して、そこの関数などを使うくらい。

create_qr.php
<?php
// ライブラリ読み込み
require_once "phpqrcode/qrlib.php";
 
// 画像の保存場所
$filepath = 'qr.png';
 
// QRコードの内容
$contents = "result.php?data=hogehoge";
 
// QRコード画像を出力
QRcode::png($contents, $filepath, QR_ECLEVEL_M, 6);

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

内容はコメントアウトの通り。

この状態で http://127.0.0.1:8080/index からフォーム経由で移動すると、result?date=にQRコードが表示されるようになる。
スマートフォンなどで、表示されたQRコードを読み取ってみると、$contentsの内容であることがわかる。

image.png

GETの値をQRコードに反映させる

トップページ(index.php)のフォームで入力した値をQRコードで出力できるようにしてみる。

QRコード表示用ページ(result.php)でGETで受け取った値を含めたURLをQRコード作成ファイル(create_qr.php)に渡してあげればOK。

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

// URLを定数に設定
$url = 'create_qr.php?data='.$_GET['data'];
?>

<!-- 中略 -->

<body>
	<h2>QRコード</h2>
	<img src="<?php echo $url ?>" />
	<br>
	<a href="index">戻る</a>
</body>
</html>
create_qr.php
// 前略

// QRコードに入れるテキスト
$contents = "result.php?data=".$_GET['data'];
 
// QRコード画像を出力 ※詳しくは公式サイトのマニュアルを確認ください。
QRcode::png($contents, $filepath, QR_ECLEVEL_M, 6);

// 後略

参考資料

13
16
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?