SERVICEHACKBOOKSAboutCONTACTtwitteryoutuberssSearchMySQL内に保存された画像を、実ファイルに変換するスクリプト02/15/2013実は僕が10年前くらいに作ったWebシステムのいくつかは、データベースにBLOB形式でバイナリファイルを格納していました。データベース内に直接画像を保存することで、検索と連動して処理しやすいようにしたつもりでした。実際に運用がはじまるとそんなことはありませんでした。データが増えてくるほどに危険性が増してきます。データベースのバックアップデータも肥大化し、SQLでバックアップをとっても、ファイルが数GBともなると、直接ファイルを開いて確認することはできませんし、復元する時にとんでもない労力が発生する可能性があります。いうことから、これまでデータベースに保存していた画像を取り出して、通常の画像ファイルに変更して保存しなおすスクリプトを作りました。それぞれの環境によって適宜変更が必要かと思いますし、流用の際は自己責任でお願いします。データベースから画像を抽出するスクリプトファイル名をtest.phpとつけた場合の例です。以下の画像を格納しているテーブルはidが連番でつけられていて、pic_fileはBLOB型のバイナリデータが入っています。"データベースに接続できません。"データベースが存在しません。nextsyori(){<?if($kekka!=0){?>document.form.submit();<?}?>}</script></form></body></html>画像を格納しているテーブルをid順に1件づつリクエスト。画像ファイルが存在すればスキップして次のidに飛びます。ファイルがなければ、photoフォルダ内にid.jpgというファイル名で画像をつくって、次のidに飛びます。JavaScriptのsetTimeoutで2秒後にnextsyoriを実行して、フォームを実行して次のidに飛ばしています。データベースのリクエスト結果がなくなれば、画像テーブルの最後の行まで進んだということなので、その時には実行しないようにしています。setTimeoutを使っているのは、一気にスクリプトを走らせて、サーバーが重たくならないよう、タイムアウトがおこらないようにするためです。「自分のサービスで生きていく」をコンセプトに個人開発オンラインサロン「入江開発室」を運営(詳しいプロフィール)あわせて読みたい顧客の要望通りにシステムを作ったのに「使いずらい」と不満が出るのはなぜかWEBサービス収入が月12万円で伸び悩んでます。