MySQLにblobで格納されたデータをまとめてファイル出力する
旧システムから新システムへのデータ移行の現場での一コマ。
DBにblobで格納されてた画像データをまとめてファイル出力したかったので、
PHPスクリプトを書いてみた。
<?php // DB接続情報 $db_host = 'localhost'; $db_user = 'root'; $db_pass = 'hogehoge01'; $db_name = 'db_name'; // 対象テーブルリスト $tables = array( 'a_images', 'b_images', 'c_images', 'd_images', 'e_images', 'f_images', ); $db = mysql_connect($db_host, $db_user, $db_pass); if ($db == false) { echo "database connect error\n"; exit; } echo "database connect\n"; if (!mysql_select_db($db_name, $db)) { echo "database $db_name is not exist\n"; exit; } echo "selcted database $db_name\n"; foreach ($tables as $table) { $sql = "SELECT * FROM $table"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { // ファイル出力先ディレクトリ $dir_path = 'files' . '/' . $table . '/' . $row['id']; mkdir($dir_path, 0777, true); // ファイル名はfilename, // バイナリはdataカラムに格納されている前提 $file_path = $dir_path . '/' . $row['filename']; $fp = fopen($file_path, 'w'); fwrite($fp, $row['data']); fclose($fp); echo 'File output from ' . $table . '(id = ' . $row['id'] . ")\n"; } }