[PHP][MySQL]データベースのBLOB画像をダウンロードして保存する
データベースにバイナリーデータとしてBLOB形式で画像を保存してて、どうしてもダウンロードしたい時があった。
MySQLのテーブルからPHPを使って、サーバーに保存したい。
参考にさせていただいたサイトは下記。
けれども、エラーが多く、使えなかった。。(良いプログラミングだとは思います)
情報が古くなってしまっているのだろう。
そこで、今でもXサーバーなどのレンタルサーバーで使えるようにしてみました。
PHP形式のファイルにして、サーバーにアップロードして、そのファイルにアクセスするとできるようにしています。
<h3>前提</h3>
MYSQLサーバーのテーブルのカラムに、画像が入ったBLOB形式のカラムと、その画像の名前が入ったカラムがあります。(私の場合)
<?php
//データベースに接続
$db = mysqli_connect("ホスト名", "ユーザー名" ,"パスワード","データベース名");
if($db==False) {
print "データベースに接続できません。";
exit;
}
// データベースの確認
if(!mysqli_select_db($db,"データベース名") ) {
print "データベースが存在しません。";
exit;
}
//num初期値
$num=0;
if($_GET[num]==""){ $num=0; }else{ $num=$_GET[num]; }
?>
<html>
<body onload="setTimeout('nextsyori()',2000)">
<form name="form" method="GET">
<input type="text" name="num" value="<? echo $num+1; ?>">
<input type="submit" value="つぎへ">
<?
$psql="select * from テーブル名 order by id limit ".$num.",1";
//$psql="select * from テーブル名 order by id limit 2";//動作確認用に
$presult = mysqli_query($db,$psql);
$kekka = mysqli_num_rows($presult);
while($pdata = mysqli_fetch_array($presult)){
$filename = 'photo/'.$pdata['ファイル名のカラム(なければidでもOK)'].".jpg";
echo $filename."<br/>";
//ファイルがあればスキップ
if (file_exists($filename) && $kekka!=0) {
?>
<script>
document.form.submit();
</script>
<?
//ファイルが最後までいけば終了
}elseif($kekka==0){
echo "終了";
//ファイルがなければ画像化
}else{
//フォルダを作る時
// $dir_path = 'photo';
// mkdir($dir_path, 0777, true);
$fp = fopen($filename, 'wb');
fwrite($fp, $pdata['BLOB形式のカラム']);
fclose($fp);
}
}
?>
<script>
function nextsyori(){
<?
if($kekka!=0){
?>
document.form.submit();
<?
}
?>
}
</script>
</form>
</body>
</html>
これで「photo」フォルダ内に次に次に画像が保存されていきます。
画像カラムがnullの時は、スキップされます。
途中で止めたい時は、FTPでそのPHPファイルを削除してください(もっとよい方法あるかもですが苦笑)
念の為、動作確認ができるようにしているので、まずはそれをお使いください。