• ベストアンサー

【php】画像のアップロードの方法

画像のアップロードは大きく分けて以下の3つの方法があると思います (1) ●画像を (ユニークID).jpg の名前で保存 呼び出すときは、ユニークIDに紐付いた画像を呼び出す。 (2) ●画像を (任意のファイル名).jpg の名前で保存 同時に、画像のファイル名をデータベースに保存。 呼び出すときはデータベースに保存されたファイル名に紐付いた画像を呼び出す (3) ●画像データをデータベースに直接保存 呼び出すときは、データベースから呼び出す どの方法が一番いいでしょう?

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

1は競合・上書をユーザーにゆだねる時点で不特定のユーザーが 利用するシステムにはつかえません。 管理に特定の権限をもった任意のユーザーが使うにしても ファイル管理をさせるのは危険です。 3はオーバーヘッドを考慮すればあまりよいやり方とはいえません 基本的には2が選択されますが、あえて必要がなければDBで紐づけをせず アップする際にユニークと思われる任意のidを発行し、 実際にそのファイル名に競合がないことが確認されたばあい 採用されるような仕組みで処理することも可能です。 (もとのファイル名など気にしないのであれば) たとえば日時ミリ秒でハッシュしたり、うんぬん

yuzuru0024
質問者

お礼

回答ありがとうございます。 ファイル名がかぶるのだけは注意しないといけないですね

その他の回答 (2)

回答No.3

僕は1に近い2との併用な感じをよく使います。 画像データにユニークIDで名前付けして、ファイル名とユニークIDの紐付けをDBで管理しています。 ・不特定多数の人が利用するシステムで名前付けに自由度を持たせる。 ・ファイル情報を細かく管理したい。 などで、DB管理が楽なのでこの方法を採用しています。 名前の重複も可能になったりするので、自由だけど管理に注意が必要ですが… でも、みなさん色んな条件や考えがあり、多分答えは無いんでしょうね。 条件場合によっては3が効率的な場合もあるだろうし。(あんまり想像できないけど) ^-^

yuzuru0024
質問者

お礼

回答ありがとうございます。 画像が入ってるかどうかもDBで一目瞭然なので 2が一番いいのかもしれませんね。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 負荷や管理のしやすさで多用するのは(2)です。 サーバスペックが高くて負荷を気にしないシステムで(3)を利用しました。 これだと削除処理も一発です。

yuzuru0024
質問者

お礼

回答ありがとうございます。

関連するQ&A

  • 【php】画像アップローダのセキュリティ

    マイページのプロフィール画像等、 画像をアップロードできる機能があるサイトを作成した場合 とあるディレクトリに、そのすべてのデータが入っていくとします。 image_22_00001.jpg image_02_00002.jpg image_45_00005.jpg というような感じで、あるルールにそってファイル名がついていくとして 削除ボタンのようなフォームで削除する場合、 「IDが02の 00002番目の画像をを削除しろ」  ↓ image_02_00002.jpg 削除 というプログラムを書くとします。 しかし、もし、POSTやGETでIDや番号を送ってしまうと、 POSTやGET値を改ざんするだけで ディレクトリに入ってる他の人がアップロードした画像データ等 どんな画像データでも消せてしまうことになります。 データベースに image_02_00002_XXXXXX(ハッシュ値) で登録するにしても、 データベースを呼び出すとき、どのレコードに入ってるデータを削除するか という指定をする時にデータベースのクエリで使うID等を改ざんすることで 好きなレコードの画像を削除することができます。 このようにPOST、GETの改ざんをされても 本人がアップしたもののみしか削除できないような ロジックはどのようにして組み立てたらよいものなのでしょうか?

    • ベストアンサー
    • PHP
  • アップロードされてきた画像ファイル

    フォームからアップロードされてきた画像ファイルを、適当なファイル名を付けてJPGあるいはGIFの拡張子で保存し、HTMLファイルで保存した画像を一覧表示させようというCGIスクリプトを作りたいと考えています。 <FORM action="xxxx.cgi" method="post" enctype="multipart/form-data"> <INPUT type="file" name="gazo"> <INPUT type="submit"> </FORM> とこんな具合のフォームから画像ファイル(JPGやGIF)をアップロードした時、 受け手のxxxx.cgiでは、この画像ファイルのデータをどのように受けたらよいのでしょうか? cgi-lib.plを読み込んで、$in{'gazo'} というような形で画像ファイルのデータを受け取ればよいのでしょうか?

    • ベストアンサー
    • CGI
  • 画像のアップロードが出来ない

    →添付可能なファイルは.gif/.jpg/.jpeg/.png サイズは100KBまで。 ファイル名に半角スペースがあるとアップロードできません。 jpeg、サイズ100KB以下の画像を選択したのですが、アップロード出来ませんでした。なぜでしょうか。

  • PHPで複数の画像を同時にアップロードする方法

    OS = WINXP Pro SP2、Server = An Httpd、PHP = PHP5の環境にてDevelopmentしております。 質問です。PHPで複数の画像を同時にアップロードする方法が知りたいです。現在、jpg,png,bmp,gifを アップロード可能にしているのですが、同時に5つまで10MB以内でUploadできるようにしたいのですが、 if(strlen($uploadfile) > 0 ) { $fileinfo = pathinfo($uploadfile_name); $fileext = strtoupper($fileinfo["extension"]); if ($uploadfile_size > 10002400) { $errmsg .= "<font color='#555555'>画像ファイルのサイズが大きすぎます。3MB以下にしてください。<BR>"; } elseif ($uploadfile_size == 0) { $errmsg .= "<font color='#555555'>画像ファイルが存在しないか空のファイルです。</font><BR>"; } if (($fileext=='JPG')||($fileext=='GIF')||($fileext=='BMP')||($fileext=='PNG')){ if ($fileext == "JPG") { $mictime = microtime(); $imgfilename = substr($mictime, 11) . substr($mictime, 2, 6) . ".jpg"; chmod($uploadfile,0755); if (!move_uploaded_file($uploadfile, "upload/$imgfilename")) { $errmsg .= "<font color='#555555'>ファイルのアップロードに失敗しました。</font><BR>"; } } ... この様な感じで現在はやっていますが、これのどの様に変更すれば同時にアップロードできるようになるのでしょうか。どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 画像アップロードする時…

    画像をアップロードする時、その画像を保存しているところを書いて、そのあとにファイル名を書きますよね? 例えば、My Documentsに入っているnewという名のファイルをアップロードする場合は「C:My Documents...」的なのを書くか開くかして、「送信」ボタン押しますよねぇ?その時、送信ボタン押したら、画面が切り替わって「画像ファイルはgifとjpgとpngのみです。」と出てきて、何回やってもこの画面に切り替わるんです>< 一体どうしたことでしょうか…

  • PHP MySqlでの複数画像アップロード

    ご質問させていただきます。 複数画像をアップロードするには以下のようなかたちになると思いますが、 画像ファイルを保存するところまでは出来たのですが、同時に画像ファイル名をDBに登録出来ればと考えています。 以下の場合、nameが同一になるので3つのカラム(img1,img2,img3)にそれぞれ登録するにはどのようにすればいいでしょうか? <input type="file" name="uploadfile[]" /> <input type="file" name="uploadfile[]" /> <input type="file" name="uploadfile[]" />

    • ベストアンサー
    • MySQL
  • 画像をアップロードするプログラム

    つい最近Perlの勉強をはじめて、とりあえずテキストデータのファイル入出力するところまで出来ました。そこでJPG画像なんかもUploadしてテキストファイル側はその画像のあるURLを保存しておき、後でHTMLに書き出すときにimg src=そのURLとすれば画像つきの結果Webページが作成できるだろうとまでは思ったのですが、 さてPerlでローカルコンピュータの任意のフォルダの中にあるJPGファイルを指定して、実行ボタンをクリックすると、Webサーバーの任意のフォルダーにアップロードするシステムはどう作ったら良いのかわかりません。 良くオークションなんかの出品で、画像を指定してここをクリック!!とかすると、出品物の内容書き以外に写真も添付できるやつです。実際にあるシステムですから多分できるんだろうとは思うのですが、Webサーバーにログインするのにはユーザー名やパスワードが当然いるはずですし、そのログインのユーザー名やパスワードをプログラム中に記述しておくのは結構あぶない話でしょうし。みんなどうしているのだろう? ご指導、参考URLなど宜しくお願いします。

    • ベストアンサー
    • Perl
  • ジオシティーズでの画像アップロードについて 画像が見れません::

    初めまして。 私は今HPを作っているのですが、アップロードで少しわからないことがったので質問させてもらいます。 この間、一緒にHPを作っている友人がYAHOOメールに送ってきてくれた画像を保存し、ジオシティーズのファイルマネージャーのEZアップロードから参照を押し、risk.jpgという名前の画像(イラスト)ファイルを選択し、アップロード。 そして「転送が終了しました」 の文字を確認してファイルマネージャーに戻り画像を確認してみると、×印になって見れませんでした… それをつくった人のパソコンからもしてみましたが、ダメでした。 一応ヘルプや検索などをして調べてみたのですが、名前は半角英数でファイル形式もジオシティーズにアップできるもの、要領も800キロバイトなので問題はないように思えます。 が、何か問題があるから見れないのでしょうが… ただ素材屋さんなどから「名前をつけて保存」してアップした画像などは同じやり方で見れるので、アップの仕方には問題ないように思えます。 そのファイルに何か問題があるのでしょうか… 全く分からないので、誰かアドバイスしてください(><)

  • 画像だけアップロードされません。

    初歩的な質問で申し訳ないです。 FlashMXを使って動画を作成しました。 外部画像(imagesというフォルダを作成)を読み込む動画を作り、ffftpソフトを使用してアップロードをしたのですが、アップロードされたswfファイルには画像が読み込まれません。 (アップロード前のffftpの左側で動作確認すると問題ありません。) 素人で申し訳なく、今日も一日ネットで調べたりしてみましたが上手く出来ませんでした。 自分では、外部画像「images」のフォルダの階層を変えてみたり、バイナリに指定してアップロードしてみたり、訳分からず、index.htmlと名前を変更してみたりと色々試してみました。 ffftpソフトのアップロード後の画像ファイルを右クリックで「URLをクリップボードへコピー」としてみると「ftp://ftp.×××.jp/フォルダの名前/slideshow1/images/p04.JPG」 となっているので、これが原因ではないかと思ったりもしましたが、ファイル名の変更の方法なども分かりません。 自分なりに調べたのですが分からず、簡単な質問で申し訳ないのですが、本当に困っています。 どうぞ宜しくお願い致します。

  • フォームからアップロードされた画像ファイルの処理

    フォームからアップロードされてきた画像ファイルを、適当なファイル名を付けてJPGあるいはGIFの拡張子で保存し、HTMLファイルで保存した画像を一覧表示させようというCGIスクリプトを作りたいと考えています。 質問1 <FORM action="xxxx.cgi" method="post" enctype="multipart/form-data"> <INPUT type="file" name="gazo"> <INPUT type="submit"> </FORM> とこんな具合のフォームから画像ファイル(JPGやGIF)をアップロードした時、 受け手のxxxx.cgiでは、この画像ファイルのデータをどのように受けたらよいのでしょうか? read(STDIN,$_,$ENV{'CONTENT_LENGTH'});としたり、 あるいは cgi-lib.plを読み込んで、$in{'gazo'} というような形で画像ファイルのデータを受け取ればよいのでしょうか? 質問2 画像ファイルを受け取ったとして、フォームから送られてきた画像ファイルがJPGなのかGIFなのかを判別することは可能でしょうか? 可能ならば、判別するためのスクリプトはどんなものが考えられるでしょうか? (フォームから送られてくる画像ファイルのデータの何をチェックすれば、JPGかGIFかを判別できるのでしょうか?) もしご回答頂ける方がおられればご教授ください。よろしくお願いします。 なお、「既存のスクリプトを利用しなさい」というような回答やアドバイスならば不要でございます。

    • ベストアンサー
    • Perl

専門家に質問してみよう