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

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

どうもー安藤です。

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

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

まずは、

ファイルの取得

・・・
//入力情報を取得
$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に保管!

データベースに保管

・・・
$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

・・・
$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)を表示できるようにしましたー。

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

みたいな感じですね!!

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

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

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

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