DBに保管したファイルを出力してみる。

安藤(プログラマー)
演劇もやっていまする。

どうもー安藤です。

自作php掲示板作り、実はもう完成しております。笑
職務に追われ、なかなかブログを更新できない日々でしたが復習を兼ねて、意を決して更新します。

今回は掲示板からファイルをアップロードし、DBに保管、そしてそれを出力表示するというところ。

まずは、

ファイルの取得

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
・・・
//入力情報を取得
$file = $_FILES['file']);

//データ情報を取得
$file['file'] = file_get_contents($file['tmp_name']);

//ファイルサイズ
$file['size'] = $file['size'];

//拡張子
$path = pathinfo($file['name']);
$extension = $path['extension'];

//mime
$file['mime'] = getMime($extension);
・・・

と、こんな感じでフォームからアップロードしたファイルの情報を取得します。
次にこれをDBに保管!

データベースに保管

1
2
3
4
5
6
7
8
・・・
$statement = $con->prepare("INSERT INTO $file_table_name(file,mime) VALUES(:file,:mime)");

$statement->bindValue(':file',$file['file'],PDO::PARAM_STR);
$statement->bindValue(':mime',$file['mime'],PDO::PARAM_STR);

$statement->execute();
・・・

これでDBに保存は完了。
そしてそして、保存した$file['file']を出力するためのphpを準備。

ファイルの出力

loadFile.php

1
2
3
4
5
6
7
8
9
10
11
12
13
・・・
$id = $_GET['id']);

$statement = $con->prepare("SELECT file,mime FROM $file_table_name WHERE id = :id");

$statement->bindValue(':id',$id,PDO::PARAM_STR);
$statement->execute();

$row = $statement->fetch(PDO::FETCH_OBJ);

header("Content-Type: ".$row->mime);
echo $row->file;
・・・

こんな具合!
あとはこのphpをテンプレート側で呼んであげればOK。
僕は画像(jpg・png・gif)と動画(mp4・mov)を表示できるようにしましたー。

1
2
3
4
5
6
7
・・・
{% if preg_match('/^image/',file.mime) %}
    <img src="/loadFile.php?id=" width="200px;">
{% else if preg_match('/^video/',file.mime) %}
    <video controls width="200px;"><source src="/loadFile.php?id="></video>
{% endif %}
・・・

みたいな感じですね!!

アップロードするときにエラーが起きて悩まされることがありますが大体は、

http://php.net/manual/ja/features.file-upload.errors.php

で判断できます。
基本的にはphp.iniの設定を修正すれば治るのではないかと。

これにて、僕の掲示板でファイルアップロードもできるようになりました!