[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ファイルを削除してください(もっとよい方法あるかもですが苦笑)
念の為、動作確認ができるようにしているので、まずはそれをお使いください。