プログラミング

[PHP][MySQL]データベースのBLOB画像をダウンロードして保存する

[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ファイルを削除してください(もっとよい方法あるかもですが苦笑)

念の為、動作確認ができるようにしているので、まずはそれをお使いください。

-プログラミング

© 2022 青い空とコーヒーと