CSVで画像をDBにつっこみたい

このQ&Aのポイント
  • PHP+MySQLで名刺の管理ソフトを作成中。名刺の画像もBLOBでデータとして保存している。CSVでの画像のインサート方法を検討中。
  • 対応検討として、CSVでバイナリを扱える方法を探すか、パスだけCSVに指定して画像をPHPでバイナリ化しインサートする方法、CSVにファイル名だけ記載してzipしてアップし解凍してインサートする方法が考えられる。
  • ファイルDIRを作って画像ファイルを置き、CSVにはパスだけ記載する方法もあるが、今回は対象外としている。
回答を見る
  • ベストアンサー

CSVで画像をDBにつっこみたい

お疲れ様です。 いつもお世話になっております。 現在PHP+MySQLで、名刺の管理ソフトを社内向けに作っています。 名刺の画像もレコードとしてくっつけるため、BLOBでデータを持っています。 一件一件のデータのインサートはできるのですが、CSVでのインサートの仕様を今検討していまして、皆様のお力を借りたく思います。 よろしくお願いします。 仕様 ・名刺画像はBLOBでDBにインサートする ・データはCSVであげる 対応検討 ・CSVでバイナリを扱える方法を探す  →一枚一枚バイナリに変換→CSVなので、手間な上に扱いにくい ・パスだけCSVに指定、その後パスをさらって画像だけPHPでバイナリ化、インサート  →パスからPHPでアップ処理ができるのか今のところ不明 ・CSVにファイル名だけ記載してもらい、CSV+画像をzipしてもらってアップ。execで解凍し、バイナリ化し、インサート  →外部コマンドの許可が必要。 本当は・・・ ・ファイルDIRを作ってファイルを置き、CSVにはパスだけ記載。  →一番楽だが今回は対象外。 てなところなんです 何かいい案はないでしょうか。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.1

こんにちは。 難しい問題ですね。 > ・ファイルDIRを作ってファイルを置き、CSVにはパスだけ記載。 エンドユーザの利便性を図るために、FTPやSSHは使えないといったところでしょうか? 一件一件のデータインサート時は、どのようにやっているのでしょうか。 CSVにはファイル名だけ記載してもらって、CVSファイルと同じページ(あるいは、同じフロー)で画像ファイルを別にアップロードしてもらうのはダメなのでしょうか。 あとは、使えるのか分かりませんが、zip関数(http://jp2.php.net/manual/ja/ref.zip.php), zlib圧縮関数(http://jp2.php.net/manual/ja/ref.zlib.php)なるものがあるようです。 PHPの再インストールが必要ですが、execを許可するよりは安全かと思います。 あまり参考にならない回答でごめんなさい。

nyalio
質問者

補足

tecinfoさん 早速のアドバイスありがとうございます。 名刺の管理という点で、事務の方が使うことが想定されています。 一般的にFTPなどはやはり直接ファイルをいじる開発などが使うものですし、万が一の事態(誤って削除など)を極力避けるためにも、 CSVで穏便にアップロードするのが望ましいという状態です。 一件一件の場合は、すでにweb上でフォームを作っていまして、そこで画像をinput type="file"であげてもらって、いったんtmpフォルダに入れたものをバイナリ化してインサートという仕様です。 >CSVにはファイル名だけ記載してもらって、CVSファイルと同じページ(あるいは、同じフロー)で画像ファイルを別にアップロードしてもらうのはダメなのでしょうか。 こちらに関してですが、これも検討中です。ただ、CSVの利点としては、一括でデータを投入できるというのがありますので、別に個別に画像を登録、となると、面倒なのと、人為的なミスも考えられます(それを言ってしまうとキリがないのですがorz) zip関数はexecよりは(安全性などに関しては)魅力的ですね。じっくり見てみたいと思います。ありがとうございます。

関連するQ&A

  • CSVをDBに登録するには

    質問させて頂きます。 言語:php サーバ:Linux 下記のようなDBに -------- 1|山田 2|田中 3|鈴木 下記のようなCSV(で無くても良いです)を用いてDBにデータを登録したいと考えています。 《csv》 吉田 斉藤 高橋 『質問詳細』 この時、サーバ側にCSVを用意しておくのではなく、操作をしているクライアント側でCSVをアップロードしてもらいたいと考えているのですが、方法がまったくわかりません。 イメージとしては、「参照」というボタンを押してファイルを選択し、投稿するといったよく見かける形です。 ※アップロードに関してはhtmlの<input type="flie">を使用することでうまくいきましたが、そのデータの中身を取り出す方法がわからず苦戦しています。 サーバ側に用意しているファイルであれば、そのファイルが置いてある場所までのパスを指定して、ファイルを開けばいいと思うのですが、この場合はどのような処理を行えばよいのでしょうか? phpのみで解決?javascript?cgi?いろいろ調べてみましたが、参考になるものを見つけることが出来なかったので質問させて頂きました。 ご存知の方がいらっしゃいましたら、どなたかよろしくお願い致します。 また、質問の説明に不備がありましたら、すぐに修正しますのでご指摘下さい。

    • ベストアンサー
    • PHP
  • MySQLでのバイナリデータ削除方法

    MySQLでのバイナリデータ削除方法 現在、PHPとMySQLでデータベースを作っている初心者です。 MySQLに登録したBLOB型のバイナリデータ(jpeg画像)を削除することはできるのでしょうか。 PHPMyAdminではレコード自体は消せますが、バイナリデータについては編集不可となっています。このフィールドのみ空にすることはできるのでしょうか。 考え方、方法などご教示ください。 上書きでNULLをインサートする??のかとも思うのですが、よくわかりません。 MySQL 5.1.34 PHP 5.2.6

    • ベストアンサー
    • MySQL
  • SQLITEでCSVインポート方法

    SQLITEのデータベースにCSVをインポートしたいと思っています。 ローカルにCSVファイルを配置し、サーバーに取り込む事をしたいのですが、疑問が1点。 Access VBAを利用しようと思っています。下記のサイトを参考にしています。 http://billyboy.blog81.fc2.com/blog-entry-203.html# INSERTをかければ問題なくインサートする事ができました。ただ、1万件のデータを取り込む時は1万回Insertを発行することになります。 かなり時間がかかるため、良い方法がないでしょうか? 今後はPHPとかも勉強して、PHPからも同様の事がやりたいと思っています。 CSVをデータベースに高速に取り込む方法があったらお教えください。宜しくお願いします。

  • csvを使った画像データの保存と表示

    お世話になっております.ご教授いただけると助かります. データーベースの代わりにcsvを利用します. phpのバージョンは5を使っています. 入力用画面としてtouroku.phpを作成します. 内容は画像の説明(text)と画像データ(jpg)を指定するものです. 送信をするとcsvファイル(sample.csv)にデーターが保存されます. 画像データはPCの上にあるjpgをサーバの決められたフォルダにアップロードします. 続いてhyouzi.phpで検索を行います. sample.csvに保存されている情報から結果として説明と画像を表示します. textをcsvに保存して参照・編集はできております. 現在jpgの保存がうまくできません.このため参照・編集もできません. 参考としてtextとjpgをcsvに保存するサンプルを探しております. よろしくお願いいたします.

    • ベストアンサー
    • PHP
  • 画像をDBに保存し、表示させるのは・・・?

    はじめまして。 今、(1)ファイル参照から画像ファイルを選択してDB(MySQL:phpMyAdmin2.10.1)にある フィールド(gazou)へBLOBのバイナリで保存し、 (2)違うぺージでDBに保存してある画像を、検索して表示させたいのですが、 以下のようになってしまい、表示できません。 http://shokuhidiet.web9.jp/a/3.bmp ソースを載せておきます。どうかよろしくお願いいたします。 http://shokuhidiet.web9.jp/a/sos.txt

    • ベストアンサー
    • PHP
  • DBからPHP出力された画像の情報取得について

    Linux、PHP4.3.11、MySQLの環境でPHPスクリプトの作成を試行しています。 MySQLの BLOB型 に格納された画像バイナリを呼び出してそのまま出力するスクリプトを作成し、同スクリプトから出力された画像ファイルのサイズや種別情報を「getimagesize()」で取得しようとしているのですがうまく行きません。 画像出力の処理は、MySQLからバイナリのデータを読み出して HTTP HEADER をつけてそのまま出力する処理を行っています。 // 画像出力処理 <?php $image = /* DBからバイナリを取得する処理 */ header("Content-type: image/jpeg\n\n"); echo $image; exit(); ?> 上のスクリプトをWEBブラウザで呼び出すと画像を表示する事ができます。 また、<img src="画像出力スクリプトのURL">としてHTML中に記述しても画像を表示できます。 しかし、getimagesize() で画像情報を取得しようとしても False となり、画像の構成情報を取得できません。 // 画像情報取得処理 <?php $src = "http://画像出力スクリプトのURL"; var_dump(getimagesize($src)); exit(); ?> $src にローカルにある実ファイル画像を指定した場合( "./hoge.jpeg" )や 他のWEBサーバ上にある画像ファイルを指定した場合( "http://よそのサーバURL/hoge.jpeg" )等は画像情報をちゃんと取得できます。 画像出力用のスクリプトで行わなければならない処理が何か不足しているのでしょうか。 原因となりそうな物が分かる方がいらっしゃいましたらご教示お願いいたします。

    • ベストアンサー
    • PHP
  • CSVファイルの内容をまとめて表示するには

    現在CSVの内容をまとめて表示する方法を思考しています。 例えば(data.csv) ========================= [ID][名前][好きなページURL] [01][山田][http://yahoo.co.jp] [02][鈴木][http://google.co.jp] [03][山田][http://www.goo.ne.jp] [04][加藤][http://google.co.jp] [05][武田][http://yahoo.co.jp] ・ ・ ・ ============= 各項目はカンマ区切りのcsvファイルです。 このCSVファイルを下記のようにまとめて表示する方法を検討しています。 <集計結果表示> 書き込み件数 山田:2件 鈴木:1件 加藤:1件 武田:1件 <好きなURL集計結果> http://yahoo.co.jp = 2件 http://google.co.jp = 2件 http://www.goo.ne.jp = 1件 =========================-- といった具合です。 自分で考えたプログラムを下記に記載します。 <?PHP $Data = file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line = explode(",",$Data[$i]); list($id,$name,$url) = $line; ここに名前の集計ができるプログラムを考えています。ここがわからず悩んでいます。 } echo "書き込み件数:{$n}件" ?> 名前の集計の方法がわかればURLの集計も同様の方法で解決が可能だと思うのです。 大変恐縮ですが、お教えいただけないでしょうか。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP + MySQL で画像データ表示

    PHP5 + MySQLでホームページを作成しております。 画像をバイナリデータでDBに登録するとことまではできたのですが、その画像データをどうやってテンプレートに表示させるかがよく分からず、質問させていただきます。 環境は下記の通りです。 ======================= サーバ:CentOS5.4(i386版) ※Apache、PHP5、MySQL、phpMyAdminはインストール済み 使用言語XHTML、CSS、JavaScript、PHP、MySQL(それぞれ別ファイルで作成しております) ======================= 現在までできている内容としては、 テンプレートのフォーム <input type="file" name="upload_img"></input> から画像を選択して、PHP側で$_FILEで受け取った後に 画像専用のテーブル カラム名:USER_IMG データ型:MIDIUMBLOB に受け取った画像のバイナリデータをinsertするところまでです。 この後に、そのバイナリデータをテンプレート上に表示させたいのですが、その方法がよく分かりません。 この質問をする事前に、参考になりそうなサイトをいくつか調べていて、 ・テーブルには画像以外にMIMEタイプを入れるカラムを用意して、MIMEタイプをもとにheaderのContent-typeを指定する ・Content-type: text/html; でも一応画像を表示させることはできる ということは分かりました。 ですが、今作っているテーブルにinsertした画像を表示させるhtmlは Content-type: text/html で作成しており、そのテンプレート内に <img src="画像パス/画像名.gif"></img> といった形で表示させたい場合に、画像のパスはどうやって指定してあげたらよいのか分かりません。 また、そのページのContent-typeは Content-type: text/html ではなく、MIMEタイプから対応したContent-typeにした方が良いのでしょうか? お分かりになる方いらっしゃいましたら、ご教授のほどお願い致します。

    • ベストアンサー
    • PHP
  • CSVファイルを読み込み表示すると行頭がおかしくなります

    ・CSVファイルを読み込み表示すると行頭がおかしくなります。 -【 CSVファイル(test.csv) 】------------------- 1,単一,必須 2,…,… ----------------------------------------- ・例えば上記のCSVを読み込んで、  PHPで表示すると以下のように表示されます。 -【 ブラウザ表示 】-------------------------- 1 P一 K須 2 … ----------------------------------------- ・というように最初の文字が正常に表示されません。 ・ちなみに数字(半角?)はちゃんと表示されました。 ・プログラムは下のような感じになります。 ・どこを編集すればよいでしょうか? -【 PHP 】--------------------------------- <?php  if( $fp = fopen( 'test.csv', 'r' ) ){   $data = fgetcsv( $fp );   while( ( $data = fgetcsv( $fp ) ) !== FALSE ){    echo $data[0] . ' ' . $data[1] . ' ' . $data[2] . '<BR>';   }  } ?> ----------------------------------------- -【 仕様 】--------------------------------- [OS]: CentOS5 [Server]: Apache_2.2.10 [PHP]: PHP_5.2.6 -----------------------------------------

    • ベストアンサー
    • PHP
  • DBからCSV出力する方法

    DBのデータをCSVファイルでダウンロードする機能を作成しています。 DBのデータをカンマ区切りで変数に格納するところまではできましたが、CSVでのダウンロード(ダウンロードダイアログ)ができません。 以下が実際の記述ですが、間違いを指摘いただけないでしょうか。 ※$result 出力するデータ全てが,区切りで格納されている <PHPファイル内> $size = strlen($result); $filename = csv_dl.csv; //csvdll header("Content-Disposition: inline; filename=\"".basename($filename)."\""); header("Content-Length: ".$size); header("Content-Type: application/octet-stream"); 以上です。 リターンが遅くなるかもしれませんが、どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう