🦔

PHPとSQLiteを使って画像を投稿しデータベースに登録するシンプルな例

2022/08/20に公開

前回投稿した PHPを使って画像をアップロードするシンプルな例 にSQLiteを加え、画像名、画像、投稿日時がデータベースにインサートされるものをリポジトリにアップしてあります。
特に何もしなくてもPHPが動く環境であれば動作すると思います。

https://github.com/CleverCure/phpSqlitePostImages


動作環境

  • PHP 8.0.3
  • SQLite 3.28.0

ファイル構成など

  • PHPを使って画像をアップロード
  • 投稿可能な拡張子はjpgとpng
  • 1MB以下の画像に制限
  • 投稿画像の最大幅を指定可能
ファイル構成
sqlite_connect.php
index.php
post.php
compleat.php
images
assets
   ┣  css
   ┃   ┗ style.css
   ┗  js
       ┗ script.js

imagesディレクトリにアップロードした画像が保存されます
index.phpにアクセスするとimages.dbファイルが生成される

フレームワークを使わずに最低限のファイル数、最低限のコードで


以下要点だけをおおまかに

画像の投稿部分に関しては前回の記事を参照してください
PHPを使って画像をアップロードするシンプルな例

SQLiteについて

意外と使われていないのかなと思うのがSQLiteですが、簡単なものを作る時にはとても便利なデータベースです。
images.dbというファイルが生成され、そのファイル自体をコピーすることでバックアップは簡単にとることができます。

基本的にはPHPが動く環境であればSQLiteは使えるようになっていますが、phpinfo()でsqlite3とpdo_sqliteなどの項目を確認しておくといいでしょう。

SQLiteは大規模なプロジェクトには向いていません。
メリットとデメリットなどは各自確認してから使用しましょう。

sqlite_connect.php

タイムゾーンの設定とSQLiteの接続の設定

index.phpとpost.php内で読み込んでいます。
初めて接続されればimages.dbファイルがルートに生成され、同時にimagesテーブルも生成されます。
2回目以降の接続であれば既にimagesテーブルがあるので8〜13行目は無視されます。

imagesテーブル
id image_title image_name created_at
内容 ID オートインクリメントで一意 画像のタイトル 画像名 投稿日時
INT TEXT TEXT INT
NULL 許可しない 許可しない 許可しない 許可しない

https://github.com/CleverCure/phpSqlitePostImages/blob/main/sqlite_connect.php

index.php

sqlite_connect.phpを読み込みデータベースに接続
https://github.com/CleverCure/phpSqlitePostImages/blob/main/index.php#L1-L2

SELECT文を書いてimagesテーブルの内容を問い合わせ、変数$htmlに内容を入れる。
https://github.com/CleverCure/phpSqlitePostImages/blob/main/index.php#L12-L35

html側に$htmlを出力
https://github.com/CleverCure/phpSqlitePostImages/blob/main/index.php#L57-L64

post.php

sqlite_connect.phpを読み込みデータベースに接続
https://github.com/CleverCure/phpSqlitePostImages/blob/main/post.php#L7

$_POST['image_title']はindex.phpから送信された画像タイトル。
$image_nameは前回の投稿を参照
PHPを使って画像をアップロードするシンプルな例
imagesテーブルにインサート。
https://github.com/CleverCure/phpSqlitePostImages/blob/main/post.php#L85-L91

画像が投稿されているかはindex.phpで確認。


まとめ

SQLiteについては日本語の情報が少ない、MYSQLなどとは違いシンプルな仕様なので痒いところに手が届かないという感じですが、シンプルなものを作るには非常に便利です。
まずは一度使ってみることをお勧めします。
シンプルなBlogなどであればWordpressを使うよりSQLiteを使うほうがいい場合も。

Discussion