- ベストアンサー
csvを使った画像データの保存と表示
- csvを利用した画像データの保存と表示についての質問です。
- 画像の説明と画像データをcsvファイルに保存し、表示する方法について教えてください。
- 現在画像の保存ができず、参照や編集もできない状況です。解決策を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
base64_encode(file_get_contents($_FILES["file"]["tmp_name"])) で画像のBASE64エンコードされたデータが取れます。 また、 $_FILES["file"]["type"] はユーザー側で偽装することが可能なので、この値は信用してはいけません。 getimagesize関数の返り値を利用するのが一番ラクです。 画像でないときはFALSEが返り、画像であるときは返り値配列のキー「mime」で返ります。 前の回答で提示したものにも含まれていますが、こちらを熟読して模倣してみてください。 ファイルアップロードに関して http://qiita.com/mpyw/items/939964377766a54d4682 http://qiita.com/mpyw/items/73ee77a9535cc65eff1e 外部からの変数受け取りに関して http://qiita.com/mpyw/items/2f9955db1c02eeef43ea http://qiita.com/mpyw/items/c39b9ee695a5c2e74627
その他の回答 (1)
>> phpのバージョンは5を使っています. マイナーバージョンまで提示してください。 むしろ5であることは当たり前です。 【例】 PHP5.4.1 画像を保存するなら個人的にはデータベース1択ですが、CSVでどうしても実現したいならBASE64エンコードを採用するのが一番いいでしょうね。 http://www.php.net/manual/ja/function.base64-encode.php http://php.net/manual/ja/function.base64-decode.php エンコードしてしまえばただのテキストデータと同じになります。 こちらもお読みください。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10111723870
補足
ありがとうございます.さっそくいろいろと書いてみましたが対象のファイル名を変数で渡す所がうまく行きません. 文字数の関係で全ての掲載がかないませんので抜粋的に記載させていただきます. PHPのバージョンはPHP Version 5.3.15となります. ~ //画像データをエンコードする $input_pict = ($_FILES["file"]["name"]); echo base64_encode($input_pict); //これだと当たり前ですがファイル名がエンコードされcsvに登録されます.いろいろ試しましたが画像データをエンコードした物が出力されません. print <<<_EOT_ <form method="POST" enctype="multipart/form-data" action="touroku.php"> ~ //HTMLでPC上の画像を選択する部分 <td>画像</td> <td><input type="file" name="file"></td> <td><input type="hidden" name="MAX_FILE_SIZE" value="102400"></td> <td><input type="hidden" name="mode1" value="upload"></td> </tr> <tr> <td colspan="2" align="right"> <input type="submit" value="追加"> <input type="hidden" name="mode" value="insert"> </td> ~ _EOT_; //画像のアップロードを行う部分 こちらは正しくupできております. if($_POST["mode1"] == "upload") { // エラーチェック switch ($_FILES["file"]["error"]) { case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: error("サイズ制限を超えています。"); case UPLOAD_ERR_PARTIAL: case UPLOAD_ERR_NO_FILE: error("アップロードできませんでした。"); } // 念のためファイルサイズを再チェック if($_FILES["file"]["size"] > 1024 * 100) { error("サイズ制限を超えています。"); } // pngとjpeg以外のファイルを拒否 if(!preg_match("/^image\/.*(png|jpeg)$/i", $_FILES["file"]["type"])) { error("ファイル形式が不正です。"); } // 特定の文字以外の文字を使用したファイル名を拒否 if(preg_match("/[^\w\d\-\.]/", $_FILES["file"]["name"])) { error("ファイル名が不正です。"); } // ファイルを移動 $upload_file = UPLOAD_DIR . $_FILES["file"]["name"]; if(move_uploaded_file($_FILES["file"]["tmp_name"], $upload_file)) { chmod($upload_file, 0644); $img_size = getimagesize($upload_file); print "次のファイルをアップロードしました。<br>\n"; print '<img src="' . $upload_file . '" '; print $img_size[3] . ' border="0">'; } else { error("アップロードできませんでした。"); } } お気づきの点あればご教授いただけると助かります.
お礼
ありがとうございます.無事エンコードを行いCSVへ出力できました. これからデコードに挑戦して表示・編集・検索の画面で表示を確認できるように作業をします. ご提示いただいた内容も読んでセキュリティを試みてみます.