質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

499閲覧

phpで画像アップロード

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/12/18 08:21

編集2018/12/18 08:22

web開発がかなり久しぶりにしています。

PHPで画像アップロード機能を作成指定ます。
そこで、同じ画像が存在していた場合エラーをだすようにしたいのですが
同じ画像をアップロードしてきた場合に、一度画像が保存されているフォルダ内の全てのファイルと比較するのが
あまり効率的ではないような気がします。

ファイル名を、**「yymmdd_hhmmss.拡張子」**で保存しているためファイル名が被ることはないです。
どのようにしたら、うまく行くでしょうか。
最悪、フォルダ内と比較するものでも大丈夫です。

以下が現在のコードになります。

html

1<form id="image_upload" method="post" action="upload.php" enctype="multipart/form-data"> 2 <input type="file" name="fname"><br> 3 <input id="upload" type="submit" value="アップロード"> 4</form>

php

1 2$temfile = $_FILES['fname']['tmp_name']; 3$filename = './img/thumbnail/' .$_FILES['fname']['name']; 4$newFileName = image_uploader($temfile,$filename); 5 6function image_uploader($tmpfile,$filename) 7{ 8 if(is_uploaded_file($tmpfile)){ 9 if(move_uploaded_file($tmpfile, $filename)){ 10 $sepaExt = explode('.',$filename); 11 $getExt = end($sepaExt); 12 $bfExt = date("Ymd_Hms"); 13 $newFileName = './img/thumbnail/' .$bfExt .$getExt; 14 15 rename($filename, $newFileName); 16 17 }else{ 18 19 } 20 }else{ 21 return false; 22 } 23 24 return $newFileName; 25}

どのようにしたら良いでしょうか。
調べても、なかなか出てこず。。。

ご教示していただけましたら助かります。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本題に入る前に。
同じ年月日時分秒のタイミングで複数箇所からアップロードされた時、
ファイル名はどうなるんでしょうね。
年月日時分秒の他にもう一つ重複を防げる仕組み(セッションIDのハッシュとか)がほしいところ。

アップロードされるファイルが何MBあるか知りませんが、
バイナリー的に総当たりで比較するのはアホらしいので、
例えばファイルのチェックサムをファイル名に紐づけてデータベース管理しておき、
新たにアップロードされたファイルでもチェックサムを取得し、
データベース上で同じチェックサムが見つかったときに
ファイルを直接比較する、みたいなのもありかもしれません。

WindowsでMD5/SHA-1/SHA-256ハッシュ値を計算してファイルの同一性を確認する:Tech TIPS - @IT

投稿2018/12/18 08:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/19 06:33

ご回答ありがとうございます。 チェックサムではないですが、phpのhash_file関数を使って「新しいファイル名/ハッシュ化文字列」 のファイル名でDBにinsertして、ユーザーがアップロードしようとしているファイルをhash_file関数でハッシュ化の文字列にし、DBのハッシュ文字と比較できそうです。比較後は、おっしゃる通りDBにある「新しいファイル名/ハッシュ化文字列」の"新しいファイル名"を取得し、アップロードしようとしているファイルと、比較して、同一のファイルだった場合、エラーを出すことができそうです。 分かりづらくて申し訳ございません。 まだイメージなので、コードが完成したら回答いたします。 また、同じタイミングだった場合もこの問題が解決したら 着手していきます!ご指摘ありがとうございました! ヒントをいただき、ありがとうございました! まずは、実装してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問